objective-c - 为什么 iOS 类不采用 copyWithZone 协议(protocol)来鼓励 active mem mgt?

标签 objective-c ios memory-management copywithzone

最近在使用 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/

相关文章:

ios - RESTKit 中的 RKResponseDescriptor 已弃用

IOS/objective-C :Animation of Multiple CGAffineTransformations

iphone - 如何在我的方法中获取 objectAtIndex?

objective-c - 使用 Objective-C 结构时防止 takeRetainedValue 或 takeUnretainedValue

c++ - 分配二维数组时的内存管理

ios - 处理 UITableView 中自定义单元格的点击不会发生

iphone - Textview 倒计时标签

ios - 按关系属性对 NSFetchedResultsController 排序? NSFetchRequest NSSortDescriptor

ios - NSN数运算

c++ - 20,000 个小对象的 vector 与指向 20,000 个堆对象的 20,000 个对象指针的 vector