_和self.赋值的区别

本文探讨了用_和self.进行属性赋值的区别,着重于copy修饰的属性深拷贝行为,指出strong/retain等仅影响引用计数,而copy导致的是内存分配。还提到常量与属性访问的区别,以及如何通过setter方法进行内存操作。
摘要由CSDN通过智能技术生成

1.用_属性赋值,是直接赋值地址,把指针指向内存,strong/copy/retain等修饰词并不起作用
2.用self.赋值,是使用setter方法,通过imp找到对应的内存,根据属性的修饰词进行操作赋值。​​​​​​​(copy修饰的属性使用objc_setProperty方式实现,其它属性使用内存偏移实现)​​​​​​​

用_或者self.进行属性赋值,对使用copy修饰的属性有影响之外,别的区别不大,因为strong/retain等只是引用计数的增加,而copy修饰的时候,如果是进行的深拷贝(比如copy对象为multable数据),_并不会重新开辟内存,而self.会开辟一份新内存(深拷贝)。

附:常量并没有getter/setter方法,如果在没有手动干涉的情况下,系统默认会为属性生成“_属性”和getter/setter方法,并将_属性保存在类的ivar_list_t(变量列表)列表中。所以用_,其实和使用常量没有区别,而用self.才是真正意义上的对属性进行访问/赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值