美文网首页
OC中的copy

OC中的copy

作者: 黑夜中的星辰 | 来源:发表于2019-11-12 14:10 被阅读0次

    1.所有被copy修饰的对象都会进行深copy吗?

    答案:NO,例如block

    全局block被copy修饰不会有任何变化

    栈block被copy修饰会被copy到堆上

    堆block被copy修饰,不会开辟新的内存,类似浅copy

    copy/mutableCopy方法的调用

    所有继承NSObject的对象都可调用,但是由于NSObject中只有声明,没有实现NSCopying和NSMutableCopying协议,所以自定义的类型调用copy/mutableCopy会报错,需要遵循并实现这两个协议

    有些类默认已经实现了这两个协议,例如:NSString \NSArray\NSDictionary

    像NSArray\NSDictionary等这些容器类对象只会进行单层深copy

    也就是说会产生新的数组对象,但数组内的元素没有产生新对象,要想对数组进行深copy,数组内的对象元素要实现copy协议中的方法-copyWithZone:

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

        Student *copy = [[[self class] allocWithZone:zone] init];

        copy.name = [self.name copy];

        return copy;

    }

    并且数组也要用:

      NSMutableArray *studentsArray = [NSMutableArray new];

      [studentsArray addObject:student];

    NSMutableArray *studentsArrayCopy =[[NSMutableArray alloc]initWithArray:studentsArray copyItems:YES];

    相关文章

      网友评论

          本文标题:OC中的copy

          本文链接:https://www.haomeiwen.com/subject/sltqictx.html