区别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的主要内容,如果未能解决你的问题,请参考以下文章

__weak与__block修饰符区别

__block和__weak的区别

__block 和 __weak的区别

__block 和__weak 区别及使用

__block 与 __weak的区别理解

iOS __block 与 __weak