strong關鍵字與retain關似,用了它,引用計數自動+1,用執行個體更能說明一切
@property (nonatomic, strong) NSString *string1;
@property (nonatomic, strong) NSString *string2;
有這樣兩個屬性,
@synthesize string1;
@synthesize string2;
猜一下下面代碼将輸出什麼結果?
self.string1 = @"String 1";
self.string2 = self.string1;
self.string1 = nil;
NSLog(@"String 2 = %@", self.string2);
結果是:String 2 = String 1
由于string2是strong定義的屬性,是以引用計數+1,使得它們所指向的值都是@"String 1", 如果你對retain熟悉的話,這了解并不難。
接着我們來看weak關鍵字:
如果這樣聲明兩個屬性:
@property (nonatomic, weak) NSString *string2;
并定義
@synthesize string1;
再來猜一下,下面輸出是什麼?
self.string1 = @"String 1";
結果是:String 2 = null
分析一下,由于self.string1與self.string2指向同一位址,且string2沒有retain記憶體位址,而self.string1=nil釋放了記憶體,是以string1為nil。聲明為weak的指針,指針指向的位址一旦被釋放,這些指針都将被指派為nil。這樣的好處能有效的防止野指針。在c/c++開發過程中,為何大牛都說指針的空間釋放了後,都要将指針賦為NULL. 在這兒用weak關鍵字幫我們做了這一步。
本文轉自蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366473,如需轉載請自行聯系原作者