ios - weak strong


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 发送消息就不会出现崩溃了。 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容