关于返回的Quartz对象的所有权

时间:2010-05-25 04:05:00

标签: objective-c quartz-graphics

我最近询问过自动释放返回的石英对象: 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惯例。处理这个问题的正确方法是什么?

1 个答案:

答案 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];