如果我们保留或自动释放池怎么办?为什么?

时间:2011-10-21 12:01:59

标签: objective-c ios ios4

语言:目标C

问题:

  • 为什么我们应该总是使用'​​drain'而不是'release'来自动释放池?
  • 如果[pool retain]会发生什么? ?为什么?
  • 如果[pool autorelease]会发生什么? ?为什么?

3 个答案:

答案 0 :(得分:1)

The documentation没有直接回答这个问题。但是,有一个非常明确的答案;因为它没有意义。

P.S:自动释放池中的排放和释放完全相同。

答案 1 :(得分:1)

在垃圾收集下,release充当无操作,而drain触发垃圾收集,然后release(这是不寻常的),所以drain应该是清空池的首选方法。根据文档,有意禁用retainautorelease

答案 2 :(得分:0)

WWDC 2011会话323,Introducing Automatic Reference Counting解释了自动释放池不是真实对象,因此无法保留它们。保留自动释放池将导致异常。观看24:27的视频或阅读Keynote的幻灯片23。您必须是注册开发人员才能访问。

在ARC下,自动释放语法是以@autorelease开头的作用域代码块。根据Apple的说法,这种语法更准确地描述了自动释放的内容。