美文网首页
Objective-C深复制和<NSCopying>

Objective-C深复制和<NSCopying>

作者: kidzss | 来源:发表于2016-03-29 14:47 被阅读83次

Objective-C深复制和协议

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

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

@protocol NSCopying

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

@end

@protocol NSMutableCopying

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

@end

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

4.实现copyWithZone方法,例:

-(id)copyWithZone:(NSZone *)zone

{

Student *stu = [[StudentallocWithZone:zone]initWithName:self.nameAge: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/mudslttx.html