所有权有关退换石英对象(Ownership regarding to returned Quartz

2019-10-22 05:45发布

我最近问了一下自动释放返回的石英对象: 自动释放为CGMutablePathRef?

戴夫·德隆回答我的问题,有没有自动释放石英(或任何NS Foundation对象),我应该使用创建规则 。 但是对文档的命名约定说,

核心基础命名约定,特别是使用这个词的“创造”,仅适用于C函数返回的Core Foundation对象。 对目标C的方法命名约定是由可可公约管辖,而不论该方法是否返回一个核心基础或可可对象。

通过,因为我的功能该帐户是一个客观的C对象的消息似乎正确命名它createSomething它不会。 我还是想回到这个对象。 什么是解决这个的最佳方式? 我应该使用获取规则 ,然后让调用者明确保留呢? 但是,这不是可可约定范围内。 什么是处理这个问题的正确方法?

Answer 1:

通常你应该从返回一个新对象的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];


文章来源: Ownership regarding to returned Quartz objects