区别assign VS weak,__block VS __weak
Posted StarainDou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区别assign VS weak,__block VS __weak相关的知识,希望对你有一定的参考价值。
在objective-c中,类中的全局变量经常使用如下的方式申明。
@property(nonatomic(1),strong(2))UIImageView *imageView;
其中的1,2处是对此变量的一些属性申明。有以下几种
strong
weak
assign
strong 和 weak 是在arc后引入的关键字,strong类似于retain,引用时候会引用计算+1,weak相反,不会改变引用计数。
weak和assign都是引用计算不变,两个的差别在于,weak用于object type,就是指针类型,而assign用于简单的数据类型,如int BOOL 等。
assign看起来跟weak一样,其实不能混用的,assign的变量在释放后并不设置为nil(和weak不同),当你再去引用时候就会发生错误,崩溃,EXC_BAD_ACCESS.
block 不能修改局部变量,如果需要修改需要加上block.
block 会对对象强引用,引起retain-cycle,需要使用weak
__weak __typeof(&*self)weakSelf =self;
在block种使用weakSelf可避免这种强引用。
(两个指针,指向同一块地址(self));
starain Dou 豆电雨
原文链接:http://www.jianshu.com/p/ba49997e29c5
以上是关于区别assign VS weak,__block VS __weak的主要内容,如果未能解决你的问题,请参考以下文章