ios在arc環(huán)境下 引入了 weak 和 strong , 我們來了解下這個2個關(guān)鍵字的作用具被。
strong?
1.我們先聲明2個屬性
@property (nonatomic, strong) NSString *str1;
@property (nonatomic, strong) NSString *str2;
2.對這2個變量進行實例化
self.str1 = [[NSString alloc] initWithUTF8String:"string 1"];
self.str2 = self.str1;
self.str1 = nil;
NSLog(@"str 2 = %@",self.str2);
輸出的內(nèi)容是: str 2 = string 1
strong 相當于 retain, 引用計數(shù)+1
那么strong 和 retain 的區(qū)別呢 涌矢?
strong 對于有些類型,比如 NSString 相當于使用了Copy,去自動處理了暮现。
weak
@property (nonatomic, strong) NSString *str1;
@property (nonatomic, weak) NSString *str2;
self.str1 = [[NSString alloc] initWithUTF8String:"string 1"];
self.str2 = self.str1;
self.str1 = nil;
NSLog(@"str 2 = %@",self.str2);
輸出的內(nèi)容是: str 2 = (null)
weak 是弱引用,當 str1 被干掉后,weak的引用被設(shè)為 nil 了峰鄙。
weak 在引用計數(shù)中 可以用來防止循環(huán)依賴無法釋放,造成內(nèi)存泄漏的問題九孩。
那么weak 和 assign 的區(qū)別呢 先馆?
當主對象被釋放后, weak 的引用都會被設(shè)為 nil ,這樣在向 nil 發(fā)送消息就不會出現(xiàn)崩潰了躺彬。?