最近在使用 Cocoa 后转向 iOS,我很吃惊地收到一个带有以下错误的 SIGABRT:“-[UIDeviceRGBColor copyWithZone:]: unrecognized selector sent to instance…”我在 UIColor 上调用了“copy”。
我查看了类引用,zounds,与 NSColor 相比,UIColor 不采用任何协议(protocol)。
现在,这没什么大不了的。我只是试图通过主动拥有颜色实例来提高效率,以便在使用后立即丢弃它。但我认为 Apple 在 iOS 中省略垃圾收集器的目的是鼓励开发人员做我正在做的事情,在内存不足、电池电量不足的可移植设备上保持精简的内存配置文件。
关于 Apple 的基本原理有什么想法,或者我的假设有什么错误吗?
最佳答案
我不明白为什么您认为实现 NSCopying
协议(protocol)会“鼓励主动内存管理”。
因为 UIColor
是不可变的(它没有实现任何改变其内部状态的方法),所以复制是没有意义的。如果您想保留它,只需保留
它,并在完成后释放
它。不需要其他任何东西。
如果你真的想要,你可以在一个类别中添加复制:
@implementation UIColor (Copying) <NSCopying>
- (id)copyWithZone:(NSZone *)zone
{
return [self retain];
}
@end
但显然这实际上并没有给您任何新功能。显然,Apple 在实现该类(class)时认为不值得花时间。
关于objective-c - 为什么 iOS 类不采用 copyWithZone 协议(protocol)来鼓励 active mem mgt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9759825/