属性 Copy 读后感

Property copy attribute 读后感

原文

  • 不可变字符串,可变字符串,copy,mutableCopy。两两组合,只有【不可变字符串 copy】是浅拷贝,其他组合都是深拷贝
  • 可变字符串属性使用 copy 修饰的原因:因为可变字符串 setter 方法会调用 copy 进行的是深拷贝,修改外层字符串值不会影响属性值。若可变字符串用 strong 修饰,则属性和外层字符串指向的是同一块地址,所以外层字符串值修改会影响属性字符串。
  • 不可变字符串属性,用 copy, strong 都可以,因为都是指向外层字符串相同的地址。
  • 你会发现 array, string, dictionary 深浅拷贝原理相同
  • copy 长用来修饰拥有可变类型的不可变对象上,因为有些情况你虽然用不可变修饰对象,但若该对象同时用 strong 修饰,那么外边传入一个可变类型的对象(子类可以赋值给父类),修改外边对象会影响内部用 strong 修饰的不可变对象。
为什么 NSMutableStrng, NSMutableArr, NSMutableDictionary 的 attribute 要申明为 copy

@property (copy) NSMutableArray *array;

你自己定义为 mutable 类型,类内部肯定想用 mutable 的 selector。而如果我传给你 NSArray 实例,你会发现内部调用 addObject 时会奔溃。虽然 setter 方法会调用 copy,但对不可变类型对象 copy 是浅拷贝,该 array 仍然是不可变对象。

@property (strong) NSMutableArray *array;

强引用外部对象,修改外部对象,array 也会改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值