【发布时间】:2016-05-24 05:27:21
【问题描述】:
我在我的代码中混合了一些 ObjectiveC 和 C++。 (我的文件是.mm 文件而不是.m。)什么时候是用@autoreleasepool 包装任何代码块的正确理由?不知道我在做什么,我正在包装任何可能包含任何非 ObjectiveC 变量的代码块,无论是 int、char、std::string,还是非 ObjectiveC 变量的任何指针.因此,我的 C++ 类中的每个类方法都有一个 @autoreleasepool 包装器。
我做错了吗?
请注意,在与此问题相关的先前问题中,他们谈到了使用 alloc、init 和 release,而这些现在在 XCode7+ 中似乎已被弃用。所以,我需要这方面的最新建议,而不是旧建议。我需要有关 XCode7 或更高版本的建议。
【问题讨论】:
-
您不必将调用包装在@autoreleasepool 中——每个线程都会自动创建一个。如果你在一个不是主线程的线程上,你可能需要创建一个自动释放池。
-
无论如何,如果您在没有自动释放池的情况下尝试自动释放对象,您将在控制台中收到打印警告
-
为什么,当我创建一个控制台应用程序时,它会默认在它创建的 main.m 中添加@autoreleasepool 块,然后呢?
-
我认为机器是通过调用 NSApplicationMain() 来设置的。在应用程序中,您的事件、标注、计时器等都是从 AppKit 运行时调用的,它每次都会设置一个自动释放循环。
标签: c++ objective-c memory-management xcode7 nsautoreleasepool