【问题标题】:ARC not working in iOS 4.3ARC 在 iOS 4.3 中不起作用
【发布时间】:2011-12-08 16:27:25
【问题描述】:

我将我的项目转换为使用 ARC,并且在 iOS 5 中运行良好。但是在 4.3 模拟器上运行时,我收到很多这样的消息:

2011-10-16 12:23:29.915 iRoster[1604:1300b] * __NSAutoreleaseNoPool(): EKCalendar 类的对象 0x5176e60 自动释放,没有适当的池 - 只是泄漏

我想我可以放很多 @autoreleasepool,但我的印象是可选的。而且奇怪的是只有在4.3上运行时才会出现

我该怎么办?

编辑: 我现在放置了一些@autoreleasepool,这大大减少了消息,所以似乎是这样。

【问题讨论】:

  • 之前有[[NSAutoreleasePool alloc] init] 声明吗?不是main() 函数中的那个,而是您自己创建的另一个。
  • 是的,我在转换为 ARC 时将其删除。您认为之后可能会有一些残留物吗?

标签: iphone objective-c ios automatic-ref-counting


【解决方案1】:

如果您在应用程序逻辑中拥有自己的自动释放池并在 ARC 之前自行管理,则需要将它们替换为 @autoreleasepool 构造,编译器会相应地处理它们。

转换为 ARC 并不一定意味着不再需要您现有的自动释放池 - 您仍然需要单独的池来包含临时自动释放的对象,例如,其他线程中的循环,因此它们不会永远花在内存和/或开始在这些线程中泄漏。见this Apple documentation on using autorelease pools

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多