八十四、基础框架(四十二)复制 物件-在n 和 setN:这两项措施当中 复制 物件

为了方便  我们  先假设  每个某一类型的物件  都包含  一个变量n,那么  读取这个变量的措施  叫做  n,而  设定这个变量的措施 叫做  setN:。当你  实施  n  和  setN:这两项措施时,你  应该想一想  你存在n这个变量中的  是  什么,读取出来的  是  什么,你  是否需要保护  这些数据。

假如  我们  需要设定  一个AddressCard类型物件中的姓名,也就是  name,我们  可以这样:

其中的newName  代表  新卡片中的姓名。假如  setName:这项措施的具体内容  是  这样:

那么  物件newName的地址  首先  存入  变量theName,接着  存入  变量  name。setName:这项措施  实施完后,本地变量theName  会消失,那么  物件newName的地址  就存储在了  newName这个变量  和  newCard这个物件中的name这个变量当中。如果  改变  物件newName的内容  就会改变  物件newCard中name这个变量所代表的姓名。

于是  更加安全的办法  就是  在setName:这项措施当中  为newName这个物件  创建  一个复制品,再  将  这个复制品的地址  存储  在这项措施实施对象中的name变量里。我们  先为复制品  分配  内存空间,然后  再采取  initWithString:这项措施  将  物件newName的内容  写入  新分配的内存空间。我们  也可以采取  copy这项措施  办到  这点:

我们  也可以将  原先地址存储在变量name中的物件  添加  到自动释放池中:

如果  我们  在@property命令中  加入  copy属性,就像  这样:

那么  @synthesize命令  就会生成  这样的setName:措施:

@property命令中的nonatomic  告诉  系统  不要用  互斥锁(互相排斥的意思)  来保护  n  和  setN:这两项措施,也就是  这里的name  和  setName:这两项措施。编写多线程代码的人  会用  互斥锁  来防止  两条线程  在同一时间  执行  同一代码。互斥锁  会使  程序  变慢,如果  你编写的  是  单线程程序,那么  你  应该避免  使用  互斥锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值