为什么使用自定义内存管理语义的集合使用免费桥接?

时间:2017-10-30 14:36:43

标签: objective-c nscopying toll-free-bridging

在书中

  

有效的Objective-C 2.0:52改进iOS和OS X程序的具体方法

有一个

  

项目49:对具有自定义内存管理语义的集合使用免费桥接

本章主要解释了免费桥接的重要性,以及解决在保留值时在NSDictionary中复制密钥的问题的示例。

它说,我引用如下:

  

如果无法复制要用作密钥的对象,该怎么办?

我的问题是,如果Objective-C中的所有对象都是从一开始就实现复制方法的NSObject的子类,那么怎么会有无法复制的对象呢?是否有任何真实场景需要这种情况?

1 个答案:

答案 0 :(得分:3)

NSObject实施-copy,方便NSCopying的{​​{1}}。如果您的对象不符合-copyWithZone:并实施NSCopying,则在其上调用-copyWithZone:将引发异常。并非所有对象都实现了复制,这就是为什么你需要保留它们而不是复制它们。 (有关-copy的更多信息,请参阅documentation for -[NSObject copy]。)