如何坚持NSColor?它没有分配,例如UIColor alloc

时间:2010-11-29 18:10:25

标签: objective-c macos memory-management allocation

我正在尝试将工作的iPhone代码移植到Mac(iOS到OSX - 我相信?)

正在使用的iPhone版本是

...
return [[UIColor alloc] initWithRed:r green:g blue:b alpha:1.0f];
}

无效的Mac尝试

...
return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}                                       

但是当我稍后访问容器时,NSColor就不存在了。但是当我尝试各种版本的[NSColor alloc]时,它们都没有“工作”。

我的问题是,如何创建一个持续存在的NSColor(以后我必须取消分配它)?

3 个答案:

答案 0 :(得分:9)

NSColor的{​​{1}}方法返回自动释放的+colorWith实例,因此为了获取对象的所有权,您可以向其发送NSColor消息。

retain

值得一提的另一点是,根据 Object Ownership Policy ,您应 返回带有的对象保留计数> 0来自没有单词-(NSColor *) getSomeColor { return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f]; } //... //somewhere else... myColor = [[self getSomeColor] retain]; allocnew的方法。

因此,在这种情况下,应该返回自动释放的copy并在接收端发送NSColor消息。

答案 1 :(得分:4)

您需要在mac尝试中保留颜色。您正在调用一个返回自动释放对象的函数。您需要在每次想要颜色时继续调用此函数或执行以下操作:

return [[NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f] retain];

答案 2 :(得分:3)

这里的关键是你需要拥有这个对象。 alloc是一条赋予所有权的信息。 retain是另一个。您需要retain颜色。