strong、weak、copy、assign 在命名属性时候怎么用

本文详细解释了iOS开发中strong、weak、copy及assign等属性修饰符的使用场景,并通过实例说明了为什么UI控件和代理要用weak来修饰,避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直都在疑惑属性定义中在什么情况下用strong、在什么情况下用weak?

总结大致如下:

     1.weak 是用来修饰代理(delegate)和UI控件。

     2.strong 是用来修饰除了代理(delegate)、UI控件、字符串(NSString)以外的对象类型。

     3.copy 是用来修饰字符串(NSString)。

     4.assign 是用来修饰基本数据类型(非对象类型),如:int、float、bool、menu等。

解析为何控件用weak。

      如图(1)所示,第一个描述的是一个控制器上边有一个按钮(button)和控制器本身的view。两者同属于UIView的subviews(子控件),而subviews是以数组形式存在的,它内部有两个地址分别存储view和button。而view本身就是以强指针类型(retain)存在的属性,故当view一直存在的时候subviews就会一直被引用,而subviews中的button就不会消亡,所以控件btn属性声明时可用weak,当然也可以用strong只是官方推荐用weak而已。所以遵循官方声明采用weak。防止内存泄漏带来的性能消耗。

                  图 1

解析为何代理(delegate)用weak。

     如图(2)所示,UITableviewController中的tableview属性(强指针类型)它是直接指向UITableview的,而UITableview中的delegate属性的本质就是UITableviewController ,当delegate是强指针类型的时候会出现循环引用的情况,直接导致两个对象不能销毁,从而引起内存泄漏,所以根据两个对象相互引用,必有一个是弱类型的原则。而tableview是系统定义的我们不能进行改动,故而当我们定义引用类型必须是弱类型(weak)。

                图 2

* 未完待续。。。

转载于:https://www.cnblogs.com/pengpengzhang/p/4654788.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值