iOS中weak和assign的区别

2017-12-07 12:52:19来源:oschina作者:风了个1人点击

分享

区别:


1.weak用于object type,就是指针类型,而assign用于简单的数据类型,如int BOOL 等


2.存储空间不同


assign修饰的基础数据类型和C数据类型一般分配在栈空间上,


weak修饰的指针类型一般都分配在堆空间上


3.是否产生野指针的区别 weak 不会产生野指针问题。因为weak修饰的对象释放后(引用计数器值为0),指针会自动被置nil,之后再向该对象发消息也不会崩溃。 weak是安全的。 assign 如果修饰对象,会产生野指针问题;如果修饰基本数据类型则是安全的。修饰的对象释放后,指针不会自动被置空,此时向对象发消息会崩溃。


共同点:


weak和assign


assign 适用于基本数据类型如int,float,struct等值类型,不适用于引用类型。因为值类型会被放入栈中,遵循先进后出原则,由系统负责管理栈内存。而引用类型会被放入堆中,需要我们自己手动管理内存或通过ARC管理。 weak 适用于delegate和block等引用类型,不会导致野指针问题,也不会循环引用,非常安全。

相关文章

    无相关信息

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台