ios在arc环境下 引入了 weak 和 strong , 我们来了解下这个2个关键字的作用。
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);
输出的内容是: str 2 = string 1
strong 相当于 retain, 引用计数+1
那么strong 和 retain 的区别呢 ?
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);
输出的内容是: str 2 = (null)
weak 是弱引用,当 str1 被干掉后,weak的引用被设为 nil 了。
weak 在引用计数中 可以用来防止循环依赖无法释放,造成内存泄漏的问题。
那么weak 和 assign 的区别呢 ?
当主对象被释放后, weak 的引用都会被设为 nil ,这样在向 nil 发送消息就不会出现崩溃了。
网友评论