ios学习笔记之OC篇(一):复制对象的方法

1.
如果尝试使用自己类中的copy方法如:NewBook=[myBook mutableCopy];就会报错,实现自己的的类进行复制,必须根据<NSCopying>协议实现其中一两个方法。

-(id) copyWithZone:(NSZone *)zone
{
    Person *person=[[Person allocWithZone:zone]init];
    //复合初始化---
    return person;
}

如果你的类可以产生子类,那么copyWithZone:方法将被继承这种情况下,
Person *person=[[Person allocWithZone:zone]init];
应该改为:
id person=[[[self class] allocWithZone:zone]init];

2.
用设值方法和取值方法复制对象
自己实现设值和取值方法,如果没有合成设置方法(setName:andAge:),可以编写使用copy版本的方法:
-(void) setName:(NSString *)theName
{
    name=[theName copy];
}

如果声明中指定了copy特性,合成方法会使用类的copy方法(自己编写的或继承父类): @property  ( nonatomic , copy ) NSString  *name;与 @synthesize指令一起使用,生成的方法与下面类似:
-(void) setName:(NSString *)theName
{
    if(theName!=name)
        name=[theName copy];
}

使用nonatomic是为了告诉系统不要使用互斥(mutex)锁定保护属性的存取方法。如果知道这段代码只会在单线程中运行,就可以避免使用这种锁定方法。
3.
使用归档程序复制对象
data为NSData类型对象
data=[NSKeyedArchiver archivedDataWithRootObject:dataArray];
dataArray2=[NSKeyedUnarchiver unarchiveObjectWithData:data];
归档和解归档过程中产生的是字符串的新副本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值