`

NSCopying

 
阅读更多
http://www.apple.com.cn/developer/iphone/library/documentation/UserExperience/Conceptual/MemoryMgmt/Articles/mmImplementCopy.html



从超类继承 NSCopying
如果超类没有实现NSCopying,
则您的类的实现必须复制它所继承的实例变量,以及那些在您的类中声明的实例变量。
一般来说,完成这一任务的最安全的方式是使用alloc, init...和set方法。

另一方面,如果您的类继承了NSCopying的行为,并声明了额外的实例变量,
那么您也需要实现copyWithZone:。
在这个方法中,调用超类的实现来复制继承的实例变量,然后复制其他新声明的实例变量。
您要如何处理新的实例变量,取决于您对超类的实现的熟悉程度。(继承的隐患)

如果超类使用了或者有可能使用过NSCopyObject,那么您必须有别于使用alloc和init...函数的情况,用不同的方式处理实例变量。
分享到:
评论

相关推荐

    复制对象(二)<NSCopying>协议和属性的copy特性对应的Demo

    本文将深入探讨`NSCopying`协议以及如何使用`copy`特性,通过一个具体的Demo来展示它们的工作原理。 `NSCopying`是Objective-C中的一个协议,它定义了一个接口,使得对象能够创建自己的精确副本。当我们需要一个...

    浅谈iOS中几个常用协议 NSCopying/NSMutableCopying

    在iOS开发中,NSCopying和NSMutableCopying是两个非常重要的协议,它们主要用于对象的拷贝操作。下面我们将深入探讨这两个协议的使用以及它们在不同类型的对象中如何实现拷贝。 首先,NSCopying协议定义了一个对象...

    IIAutoNSCopying:NSObjects的自动NSCopy

    该库使您无需所有样板代码即可使您的对象自动符合NSCopying。 您的对象可以序列化,而不必编写繁琐且难以维护的复制代码。 通常,这并不是要替换所有对象中的NSCopying代码,而是要为不太复杂的简单数据模型对象...

    EasyNSCoding:简单方便的实现NSCoding、NSCopying协议,一行代码即可实现。希望各位能帮忙点个Star,谢谢!

    在项目中经常会用到copy、mutableCopy方法,或者调用NSKeyedArchive、NSKeyedUnarchive类方法,这时候就需要实现NSCoding和NSCopying协议。这两个协议的代码是固定形式的,每次都是把属性挨个写上去,非常影响开发...

    IOS设计模式浅析之原型模式(Prototype)--copy - iOS知识库1

    原型模式的核心是`NSCopying`协议,它是Objective-C中的一个标准协议。遵循`NSCopying`协议的类必须实现`copyWithZone:`方法,这个方法用于创建当前对象的一个副本。在iOS中,`NSObject`的子类可以通过实现这个协议...

    iOS 设计模式 原型模式

    `NSCopying`是Objective-C中的一个协议,定义了一个方法`- (id)copyWithZone:(nullable NSZone *)zone;`。当一个对象遵循这个协议时,它能被复制为一个全新的对象。这个新对象与原对象具有相同的属性值,但它们是...

    iOS设计模式之原型模式

    原型模式的核心是实现NSCopying协议,该协议定义了copyWithZone:方法,用于创建对象的副本。一个对象要成为原型,只需遵循NSCopying协议并实现这个方法。以下是一个简单的例子: ```swift class MyPrototype: ...

    自定义类在NSdictionary当key的示例

    `NSDictionary`要求键必须是不可变的、遵循`NSCopying`协议的对象,通常是`NSString`实例。然而,有时我们需要将自定义类作为键来使用,以便更灵活地组织数据。本文将详细探讨如何实现自定义类在`NSDictionary`中...

    数组、字典深复制

    了解如何在Objective-C或Swift中实现数组和字典的深复制,以及自定义对象如何遵循`NSCopying`协议,对于编写高效且可靠的代码至关重要。在实际项目中,合理运用深复制能够提高代码的稳定性和可维护性。

    iOS设计模式之原型设计模式

    在iOS中,我们可以利用Objective-C的NSCopying协议或Swift的Copyable协议来实现原型模式。 首先,让我们了解一下原型模式的基本概念。原型模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在原型模式中...

    (objective-c 自定义 NSDictionary 键类的注意事项)工程

    1. **遵循`NSCopying`协议**:自定义类需要实现`NSCopying`协议,提供`copyWithZone:`方法,以便`NSDictionary`可以创建键的副本。通常,这个方法会创建一个新的对象,其属性与原对象相同。 ```objc @interface ...

    iOS工具一键JSON转OC数据模型类

    工具还会为这些属性提供对应的setter和getter方法,以及`NSCopying`和`NSCoding`协议的实现,使得对象可以方便地复制和保存到文件。 此外,这个工具可能还支持自定义类名、属性命名规则等选项,以适应不同的编码...

    IOS深浅拷贝例子

    在Objective-C中,拷贝主要是针对实现了`NSCopying`协议的对象而言的。`copy`方法用于创建对象的一个副本,而这个副本与原对象具有相同的属性值。根据拷贝的方式不同,分为浅拷贝(Shallow Copy)和深拷贝(Deep ...

    iOS设计模式-原型设计模式

    在iOS开发中,我们可以通过实现NSCopying协议来利用原型模式。 首先,要使用原型设计模式,我们需要定义一个原型类,这个类通常包含一个拷贝自身的方法,比如`copyWithZone:`。这个方法会创建一个与当前对象相同的...

    Objective-c 学习 (2).doc

    在垃圾收集环境中,如果属性是可拷贝的NSCopying协议对象,使用assign时需要显式声明,以避免编译警告。 - `retain`:适用于Objective-C对象类型,赋值时会发送`retain`消息给新值,增加其引用计数。在setter中,...

    IOS应用源码——SimpleUndo.rar

    源码中可能还包含特定的数据模型类,这些类需要实现`NSCopying`和`NSMutableCopying`协议,以支持撤销操作中的数据状态恢复。`NSCopying`协议用于创建对象的一个精确副本,而`NSMutableCopying`则用于创建可修改的...

    iOS高级经典面试.pdf

    1. **声明遵循NSCopying或NSMutableCopying协议**:要在自定义类中使用`copy`修饰符,首先需要声明类遵循`NSCopying`或`NSMutableCopying`协议。 2. **实现NSCopying协议**:实现协议中的`-(id)copyWithZone:(NSZone...

    ios内存管理之深浅拷贝

    `NSCopying`协议提供了浅拷贝的功能,通过实现`copyWithZone:`方法来完成。 2. 深拷贝:深拷贝则会创建一个新的对象实例,并复制原对象的所有属性,包括不可变对象(如NSString)和可变对象(如NSMutableArray)。...

    OC——foundation

    - NSCopying协议定义了对象的浅复制方法。 - NSMutableCopying协议定义了对象的深复制方法。 15. **NSCoding** - NSCoding协议用于对象的序列化和反序列化,实现数据持久化。 以上是OC Foundation框架中的一些...

Global site tag (gtag.js) - Google Analytics