2012-04-19 182 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。

因此,您的本地變量在所有三種情況下都會釋放 - 無泄漏。