我在代码中混合了一些ObjectiveC和C ++。 (我的文件是.mm文件,而不是.m。)什么时候用@autoreleasepool包装任何代码块的正确原因是什么?不知道我在做什么,我包装了可能包含任何非ObjectiveC变量的任何代码块,无论它是intcharstd::string还是非ObjectiveC变量的任何指针。因此,我的C ++类中的每个类方法都在其中包含一个@autoreleasepool包装器。

我做错了吗?


  请注意,在先前与此问题相关的问题上,他们谈论使用alloc,init和release,而现在似乎在XCode7 +中已弃用了这些问题。因此,我需要有关此问题的最新建议,而不是旧建议。我需要有关XCode7或更高版本的建议。

最佳答案

自动释放池用于限制其中autorelease存放的内容的生命周期。 autorelease是Cocoa的Objective-C API,因此只有Objective-C代码可以实现。因此,将自动释放池放在纯C / C ++代码块周围绝对没有任何意义,您确定这些代码永远不会调用Objective-C代码。

自动释放池通常仅在循环运行多次且每次迭代可能执行大量autorelease的情况下才有用。请注意,并非所有的Objective-C代码都会autorelease;这不是很明显。有些可可API将autorelease,有些则不会。如果所有代码都是用ARC编写的,则可能不是autorelease

08-07 04:34