我正在尝试将工作的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(以后我必须取消分配它)?
答案 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];
,alloc
或new
的方法。
因此,在这种情况下,应该返回自动释放的copy
并在接收端发送NSColor
消息。
答案 1 :(得分:4)
您需要在mac尝试中保留颜色。您正在调用一个返回自动释放对象的函数。您需要在每次想要颜色时继续调用此函数或执行以下操作:
return [[NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f] retain];
答案 2 :(得分:3)
这里的关键是你需要拥有这个对象。 alloc
是一条赋予所有权的信息。 retain
是另一个。您需要retain
颜色。