跳到主要内容

简述 系统对象的 copy 与 mutableCopy 方法?

参考答案:

copymutableCopy 是 Objective-C 中常用的两个方法,它们用于创建对象的副本。这两个方法主要在处理可变对象和不可变对象时有所区别。

  1. copy

    • 对于不可变对象(如 NSStringNSArrayNSDictionary 等),copy 方法会创建一个新的不可变对象,该对象与原始对象具有相同的内容,但它们在内存中位于不同的位置。这意味着对副本的任何修改都不会影响原始对象,反之亦然。
    • 对于可变对象(如 NSMutableStringNSMutableArrayNSMutableDictionary 等),copy 方法的行为取决于对象的类实现。在大多数情况下,copy 会创建一个不可变的副本,即使原始对象是可变的。但是,某些类可能会覆盖 copy 方法以创建可变的副本。
  2. MutableCopy

    • MutableCopy 方法总是创建一个新的可变对象,其内容与原始对象相同,但它们在内存中位于不同的位置。这意味着你可以自由地修改新创建的对象,而不会影响原始对象。
    • 对于不可变对象,MutableCopy 会创建一个可变版本的副本。例如,如果你对一个 NSString 对象调用 mutableCopy,你将得到一个 NSMutableString 对象,其内容与原始字符串相同。

在使用这些方法时,理解它们的行为差异非常重要。错误的使用可能会导致不可预期的行为或内存问题。此外,对于一些自定义的类,开发者可以重写 copyMutableCopy 方法以提供自定义的副本创建行为。