IOS 上的COPY

本文深入探讨了iOS开发中对象拷贝的概念,包括浅拷贝和深拷贝的区别,并通过实现NSCopying和NSMutableCopying协议来创建对象副本的方法。详细解释了如何在自定义类中正确实现copyWithZone方法和mutableCopyWithZone方法,以确保对象的正确复制。

刚才接触IOS的时候,类型员属性,常喜欢使用copy,retain,assign等来设置对某个成员变量的setter,getter方法。

后来发现某些对象copy是不行的。需要自己进行实现COPY。这就有点像C++中的深,浅COPY。

 

简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。

在IOS中可以这样来实现。

Foundation类已经遵守了<NSCopying>和 <NSMutableCopying>协议,即实现了copy和mutableCopy方法,因此Foundation对象可以使用这些方法创建对象的副本或可变副本

协议原型:

@protocol NSCopying

- (id)copyWithZone:(NSZone *)zone;

@end

@protocol NSMutableCopying

- (id)mutableCopyWithZone:(NSZone *)zone;

@end

 

对要实现拷贝对象的复制操作。用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copy和mutableCopy消息 。

 

@interface ptrObj: NSObject<NSCopying>

 

@end

 

.m中实现

- (id)copyWithZone:(NSZone *)zone

{

        //实现代码,按照需要进行实现。

}

转载于:https://my.oschina.net/201003674/blog/288398

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值