Objective-C深复制和<NSCopying>

作者: linc_ | 来源:发表于2016-02-02 10:09 被阅读320次
  1. 简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全。
  2. Foundation类已经遵守了<NSCopying><NSMutableCopying>协议,即实现了copy和mutableCopy方法,因此Foundation对象可以使用这些方法创建对象的副本或可变副本
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end

@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end

3.用户自定义类遵守<NSCopying>协议和<NSMutableCopying>协议,则必须实现copyWithZone方法和mutableCopyWithZone方法,否则该类对象无法响应copy和mutableCopy消息
4.实现copyWithZone方法,例:

-(id)copyWithZone:(NSZone *)zone
{
    Student *stu = [[Student allocWithZone:zone]initWithName:self.name Age:self.age];
    return stu;
}

对应main函数中:假设已经有一个Student对象stu1;
则:Student stu2 = [stu1 copy];
实现stu2是stu1的副本,这里是深复制,stu1和stu2分别对应不同内存。

5.如果你的类产生了子类,那么copyWithZone:方法也将
被继承

Student *stu = [[Student allocWithZone: zone] init];

该方法应该改为:

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

如果编写一个类的copyWithZone:方法那么子类的方法应该先调用父类的copy方法以复制继承来的copy实例变量.

相关文章

  • Objective-C深复制和<NSCopying>

    Objective-C深复制和协议 1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不...

  • Objective-C深复制和<NSCopying>

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

  • Objective-C中的<NSCopying>协议

    先给出一个demo案例:model类.h文件: model类.m文件: 定义了一个有LQUserModel对象的控...

  • Objective-C之深复制、浅复制

    首先我要推翻这句不完全正确的话:“copy就是浅拷贝,mutableCopy就是深拷贝”。 (了解深复制、浅复制定...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝 Objective-C中的浅拷贝和深拷贝

  • 深拷贝和浅拷贝

    深复制和浅复制 1、概述 对象拷贝有两种方式:浅复制和深复制。 浅复制:拷贝指针 深复制:拷贝整个对象 2、深浅复...

  • Objective-C中的浅拷贝和深拷贝

    本文转自 Objective-C中的浅拷贝和深拷贝 浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向...

  • Objective-C中浅复制,深复制和归档那些事

    浅复制和深复制 关于浅复制和深复制,之前一直都没有系统的理一遍,今天就来做做总结归纳。什么是浅复制,什么是深...

  • Objective-C的浅复制与深复制

    浅复制 浅复制就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如: 浅复制只是对对象的简单复制,让...

  • 深复制和浅复制

    JS的数据类型 在js中,变量的类型可以大致分成两种:基本数据类型和引用数据类型,其中基本数据类型指的是简单的数据...

网友评论

    本文标题:Objective-C深复制和<NSCopying>

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