的代碼只是簡單:哪種情況會導致內存泄漏?
@interface Test : NSObject
@property (nonatomic, strong) NSString * str; //strong
//@property (nonatomic, weak) NSString * str; //weak
-(void)func;
@end
@implementation Test
@synthesize str = _str;
-(void)func{
_str = @"test string"; // using ivar
//self.str = @"test string"; // using setter
}
@end
有four
的情況在上面的代碼中,強/弱,伊娃/ setter方法
哪種類型將導致內存泄漏?
哪些類型是一樣的?
我用NSLog測試了代碼,但都運行正常(沒有零印),爲什麼?約autorelease
?
--------------編輯---------------
我閱讀文檔,發現「字符串常量會永遠不會釋放」
所以當串initWithString或initWithFormat初始化代碼行爲不同的(我寫的代碼是錯誤的)
弱財產使用initWithFormat
內存管理伊娃的時候永遠是零和二傳手是一樣的:Is self.iVar necessary for strong properties with ARC?
你是怎麼測試它的?通過具有字符串字面值(類似'@「hello world」')?如果您使用了字符串文字,那麼您的「測試」已被破壞,因爲它們不會被釋放... –
字符串屬性通常會被複制而不是保留。擁有別人可能改變的保留價值可能不是你想要的。您可以爭論什麼是「必要的」,但是使用setter是一種很好的做法,因爲它會強制您爲屬性定義的行爲(如釋放舊值並保留或複製新值)。使用setter和getters也將確保KVO的工作。如果您只是更改變量,KVO將無法工作。 –