ARC下的autorelease相当于什么?

15

如果我有这段代码:

+ (MyCustomClass*) myCustomClass
{
    return [[[MyCustomClass alloc] init] autorelease];
}

这段代码确保返回的对象是自动释放的。 在 ARC 中有什么等效的方法吗?

2个回答

20

在ARC中没有等效的操作,因为你不需要自己去执行它。 这是在后台完成的,你不能自己进行操作。

你只需要使用-

+ (MyCustomClass*) myCustomClass
{
    return [[MyCustomClass alloc] init];
}
我建议你观看2011 WWDC中的ARC介绍,当你理解了它时,它会变得非常简单。
请看这里:https://developer.apple.com/videos/wwdc/2011/ 正如视频中的人所说:

你不必再多想了(几乎)。


4
请注意,发生的情况取决于您如何命名方法。 - Thilo
1
这是真的,这就是我在最后一行加上“几乎”的原因。我真的认为WWDC讲座很棒,解释了所有主要的ARC问题。 - shannoga
1
也许我需要知道底层发生的每一个细节,因此几乎是这样的 :) - eonil

7

当使用ARC编译时,只需写成:

+ (MyCustomClass *)myCustomClass
{
    return [[MyCustomClass alloc] init];
}

编译器/运行时会为您处理其余部分。


运行时与ARC无关,这完全是编译器的魔法。 - DanZimm
@DanZimm 不是这样的 - runtime 也在工作。例如:正是由于runtime的存在,才能够在跨帧之间传递对象所有权。http://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime - justin
正确,但是当添加了arc支持时,运行时没有改变,那些函数已经存在 - 注意我指的是当苹果开始支持arc时。 - DanZimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接