iOS---------开发中 weak和assign的区别
程序员文章站
2022-08-29 09:11:32
weak和assign的区别-正确使用weak、assign 一、区别 1.修饰变量类型的区别weak只可以修饰对象。如果修饰基本数据类型,编译器会报错-“Property with ‘weak’ attribute must be of object type”。assign可修饰对象,和基本数据 ......
weak和assign的区别-正确使用weak、assign
一、区别
1.修饰变量类型的区别
weak只可以修饰对象。如果修饰基本数据类型,编译器会报错-“property with ‘weak’ attribute must be of object type”。
assign可修饰对象,和基本数据类型。当需要修饰对象类型时,mrc时代使用unsafe_unretained。当然,unsafe_unretained也可能产生野指针,所以它名字是"unsafe_”。
2.是否产生野指针的区别
weak不会产生野指针问题。因为weak修饰的对象释放后(引用计数器值为0),指针会自动被置nil,之后再向该对象发消息也不会崩溃。 weak是安全的。
assign如果修饰对象,会产生野指针问题;如果修饰基本数据类型则是安全的。修饰的对象释放后,指针不会自动被置空,此时向对象发消息会崩溃。
二、相似
都可以修饰对象类型,但是assign修饰对象会存在问题。
三、总结
assign适用于基本数据类型如int,float,struct等值类型,不适用于引用类型。因为值类型会被放入栈中,遵循先进后出原则,由系统负责管理栈内存。而引用类型会被放入堆中,需要我们自己手动管理内存或通过arc管理。
weak适用于delegate和block等引用类型,不会导致野指针问题,也不会循环引用,非常安全。
上一篇: 那不串门你让我怎么看望我的亲生儿子
下一篇: 网盘搜索工具2019
推荐阅读
-
iOS---------开发中 weak和assign的区别
-
assign和weak的区别
-
Springboot的web开发中static和templates的区别
-
php进行支付宝开发中return_url和notify_url的区别分析
-
【iOS开发】UITableView中dequeueReusableCell带indexpath方法和不带的区别
-
php进行支付宝开发中return_url和notify_url的区别分析_PHP
-
php进行支付宝开发中return_url和notify_url的区别分析_PHP
-
支付宝开发中return_url和notify_url的区别介绍
-
php进行支付宝开发中return_url和notify_url的区别分析_php技巧
-
php进行支付宝开发中return_url和notify_url的区别分析,支付宝notifyurl_PHP教程