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

Rob*_*ain 0 macos memory-management allocation objective-c

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

工作的iPhone版本是

...
return [[UIColor alloc] initWithRed:r green:g blue:b alpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)

不工作的Mac尝试是

...
return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}                                       
Run Code Online (Sandbox Code Playgroud)

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

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

Jac*_*kin 9

NSColor+colorWith方法返回一个自动释放的NSColor实例,因此为了获得对象的所有权,您可以向它发送retain消息.

-(NSColor *) getSomeColor {
   return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}
//...
//somewhere else...
myColor = [[self getSomeColor] retain];
Run Code Online (Sandbox Code Playgroud)

另一个值得一提的是,根据对象的所有权政策,你应该返回一个对象保留计数从没有词的方法> 0 alloc,newcopy.

所以在这种情况下,你应该返回自动释放NSColorretain在接收端发送消息.