A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

copy在OC里面一般是在@property (copy)NSString *对象名称 的时候使用,意思是将这个对象在拷贝一份副本对象作为当前对象的属性,并且修改拷贝的成员变量的内容不会影响到源文件,同时就算修改了源文件的内容也不会影响当前意见拷贝的对象的内容。

以上就是我的理解,有漏的,请大神补充啊

1 个回复

倒序浏览
OC中的copy属性,其实就是浅拷贝,会生成一个新的副本,但只是地址拷贝,修改源文件并不会影响副本,同样的,修改副本也不会影响源文件。由于OC属性中没有mutableCopy属性,所以@property (nonatomic,copy)NSMutableString *str,也是浅拷贝,并没有新分配内存空间,这也是很容易搞错的地方。即该属性声明是一个不可变字符串。
因为是地址拷贝,因此在某种意义上相当于一次retain,引用计数会+1。如果需要深拷贝,那么你必须自己去实现!

NSObject类中的copy方法和mutableCopy方法的实现大致如下:
- (id)copy{
return [self copyWithZone:NULL];
}
-(id)mutableCopy{
return [self mutableCopyWithZone:NULL];
}
由上面可以看出来,如果要自定义copy方法,必须要实现copyWithZone:和mutableCopyWithZone:方法。
这两个方法实现的前提是要遵守<NSCopying>和<NSMutableCopying>协议。
以NSString为例,它的copyWithZone:方法示例如下:
-(id) copyWithZone:(NSZone *)zone
{
return self;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马