我最近询问过自动释放返回的石英对象: Autorelease for CGMutablePathRef?
Dave DeLong回答了我的问题,即石英(或任何NS基础对象)没有自动释放,我应该使用Create Rule。但是文档的命名约定是,
Core Foundation命名约定,特别是使用“create”一词,仅适用于返回Core Foundation对象的C函数。 Objective-C方法的命名约定由Cocoa约定控制,无论该方法是返回Core Foundation还是Cocoa对象。
通过这个帐户,因为我的函数是一个客观C对象中的消息,所以将它命名为createSomething似乎不合适。我仍然想要返回这个对象。什么是最好的方法来解决这个问题?我应该使用Get Rule然后让调用者明确保留它吗?但这不属于Cocoa惯例。处理这个问题的正确方法是什么?
答案 0 :(得分:2)
通常,您应该从返回新对象的Objective-C方法返回一个自动释放的对象。使用Core Foundation对象很容易做到这一点。例如,采用这种基本类方法:
+ (CFURLRef)appleWebsiteURL
{
CFURLRef url = CFURLCreateWithString(NULL,CFSTR("http://apple.com"),NULL);
return (CFURLRef)[NSMakeCollectable(url) autorelease];
}
请注意,上述代码适用于垃圾收集和引用计数环境。如果你在iPhone上,你可能需要这样做:
return (CFURLRef)[(NSObject*)url autorelease];