简述 系统对象的 copy 与 mutableCopy 方法?
参考答案:
copy
和 mutableCopy
是 Objective-C 中常用的两个方法,它们用于创建对象的副本。这两个方法主要在处理可变对象和不可变对象时有所区别。
-
copy:
- 对于不可变对象(如
NSString
、NSArray
、NSDictionary
等),copy
方法会创建一个新的不可变对象,该对象与原始对象具有相同的内容,但它们在内存中位于不同的位置。这意味着对副本的任何修改都不会影响原始对象,反之亦然。 - 对于可变对象(如
NSMutableString
、NSMutableArray
、NSMutableDictionary
等),copy
方法的行为取决于对象的类实现。在大多数情况下,copy
会创建一个不可变的副本,即使原始对象是可变的。但是,某些类可能会覆盖copy
方法以创建可变的副本。
- 对于不可变对象(如
-
MutableCopy:
MutableCopy
方法总是创建一个新的可变对象,其内容与原始对象相同,但它们在内存中位于不同的位置。这意味着你可以自由地修改新创建的对象,而不会影响原始对象。- 对于不可变对象,
MutableCopy
会创建一个可变版本的副本。例如,如果你对一个NSString
对象调用mutableCopy
,你将得到一个NSMutableString
对象,其内容与原始字符串相同。
在使用这些方法时,理解它们的行为差异非常重要。错误的使用可能会导致不可预期的行为或内存问题。此外,对于一些自定义的类,开发者可以重写 copy
和 MutableCopy
方法以提供自定义的副本创建行为。