我正在写Objective-C的第一步 我按照一些示例和官方文档,并使用自动释放的对象*,而没有明确声明NSAutoReleasePool。
*通过自动释放的对象,我的意思是:SomeClass *obj = [SomeClass someClass];
这样做可以吗?
它会导致记忆问题吗?
宣布NSAutoReleasePool更有效率吗?
alloc
它的一个实例。这个工厂方法[经常|总是]返回自动释放的对象,对吧?例如:[NSString stringWithCString:x]
答案 0 :(得分:6)
您通常不需要显式创建自动释放池。当您使用AppKit框架进行正常的Mac编程时,会有一个由事件循环处理的隐式自动释放池。您需要关注自动释放池主要有两种情况:
答案 1 :(得分:1)
回答你的问题:这是禁忌。如果在没有自动释放池的作用域中自动释放对象(或使用自动释放的对象),则会泄漏内存。
关于您的示例,由于Class
是struct objc_class*
的typedef,因此您编写它的方式可能会相当混乱。所以,你真的声明了一个指向类的指针,然后为它指定一个类的指针。哪个不行。此外,由于Class
本身不是Objective-C“类型”,因此您无法向其发送消息。
但是这一切既不在这里也不在那里,因为±class
不会返回一个自动释放的对象。