2012-04-19 88 views
4

在这3种情况下,我会有内存泄漏?ARC可以导致内存泄漏吗?

  • 没有__strong并没有订到零

    - (void)function { 
         NSString *string = [[NSString alloc] initWithString: @"Hello World"]; 
    } 
    
  • 没有订到零,但使用__strong

    - (void)function { 
        __strong NSString *string = [[NSString alloc] initWithString: @"Hello World"]; 
    } 
    
  • 没有__strong但设置为零

    - (void)function { 
        NSString *string = [[NSString alloc] initWithString: @"Hello World"]; 
        string = nil; 
    } 
    

通过自动引用计数(ARC),如果我不设定关键字,我假设变量是__strong

+2

不,不,是,是:) – dasblinkenlight 2012-04-19 22:01:16

+0

更短的是'NSString * string = @“Hello World”;'。在一种方法中,不需要其他动作。 – 2012-04-23 07:28:13

回答

6

如果您未指定所有权限定符,则隐含地为__strong。然后,在声明变量的本地范围的末尾,编译器会插入一个版本,无论您是否将该变量设置为nil。

因此,您的本地变量在所有三种情况下都会释放 - 无泄漏。