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(以后,我必须取消分配)?
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,new或copy.
所以在这种情况下,你应该返回自动释放NSColor并retain在接收端发送消息.