为什么对具有自定义内存管理语义的集合使用免费桥接?
Why use toll-free bridging for collections with custom memory-management semantics?
书中
Effective Objective-C 2.0: 52 Specific Ways to Improve Your iOS and OS X Program
有一个
Item 49: Use Toll-Free Bridging for Collections with Custom Memory-Management Semantics
本章主要以解决NSDictionary中键被复制而值被保留的问题为例说明免费桥接的重要性
它说,我引用如下:
What if the objects you want to use as keys cannot be copied?
我的问题是,如果Objective-C中的所有对象都是NSObject的子类,一开始就实现了copy方法,怎么会有不能复制的对象呢?是否有任何真实场景需要这种情况?
NSObject
实现 -copy
是为了方便 NSCopying
的 -copyWithZone:
。如果您的对象不符合 NSCopying
并实现 -copyWithZone:
,则对其调用 -copy
将引发异常。并非所有对象都实现复制,这就是为什么您需要保留它们而不是复制的原因。 (有关 -copy
的更多信息,请参阅 documentation for -[NSObject copy]
。)
书中
Effective Objective-C 2.0: 52 Specific Ways to Improve Your iOS and OS X Program
有一个
Item 49: Use Toll-Free Bridging for Collections with Custom Memory-Management Semantics
本章主要以解决NSDictionary中键被复制而值被保留的问题为例说明免费桥接的重要性
它说,我引用如下:
What if the objects you want to use as keys cannot be copied?
我的问题是,如果Objective-C中的所有对象都是NSObject的子类,一开始就实现了copy方法,怎么会有不能复制的对象呢?是否有任何真实场景需要这种情况?
NSObject
实现 -copy
是为了方便 NSCopying
的 -copyWithZone:
。如果您的对象不符合 NSCopying
并实现 -copyWithZone:
,则对其调用 -copy
将引发异常。并非所有对象都实现复制,这就是为什么您需要保留它们而不是复制的原因。 (有关 -copy
的更多信息,请参阅 documentation for -[NSObject copy]
。)