2 .源对象与新对象使用不同的内存区域
3 .需要实现NSCopying或者NSMutableCopying协议才能使用 复制功能
4 .Foundation中的基础数据类型如NSString、NSNumber等都 实现了NSCopying
5 .新对象的引用计数为1
NSMutableArray *array = [[NSMutableArray alloc] init];
NSMutableArray *array=[NSMutablearray arraywithobject@"zhangsan"@"lisi"]
@property (nonatomic, strong) NSMutableArray *books;
- (void)setBooks:(NSMutableArray *)books//定义属性时自动生成的,自定义时会将系统生成的覆盖
{
_books = [books copy];//如果是copy默认生成这种方法,返回值不可变 即使使用深拷贝也会使用同一个地址
// _books=[books mutableCopy];//返回值是可变的
_books=self.books;//strong生成这种方法,依靠它的类可确定是否为可变或不可变
}
- (id)copyWithZone:(NSZone *)zone //使用copy就必须实现这个方法,和协议
{
Student *stu = [[[self class] allocWithZone:zone] init];
stu->weight = weight;
stu.age = self.age;
// stu.books = self.books;//浅拷贝数值一样,地址不一样
stu.books = [self.books copy];//深拷贝数值地址都一样,俩对象共用一个存储空间