我是一名iPhone开发人员。在我的应用程序中,我正在使用ARC。我分配对象,并且一旦使用完毕,就将其赋值为“nil”。除此之外,还有其他需要做的以释放内存吗?
此外,在ARC中有没有一种方法可以显式调用垃圾收集器?是否有一种方法可以决定何时释放ARC中的内存?
我是一名iPhone开发人员。在我的应用程序中,我正在使用ARC。我分配对象,并且一旦使用完毕,就将其赋值为“nil”。除此之外,还有其他需要做的以释放内存吗?
此外,在ARC中有没有一种方法可以显式调用垃圾收集器?是否有一种方法可以决定何时释放ARC中的内存?
ARC不是垃圾回收器——将其视为手动引用计数管理,编译器代表您添加引用计数操作。
您可以做的一件好事是创建自动释放池。因为编译器添加了保留、释放和自动释放消息,所以您的对象最终会进入自动释放池。请考虑:
@autoreleasepool {
..create several temporary objects...
} // << now the autorelease pool is popped, and delayed release messages are sent
创建自动释放池非常便宜,可以真正降低内存消耗并确保您的对象资源能够及时返回。
ARC没有垃圾回收,因此没有需要调用的东西。如果您控制对象的范围和所有权,则ARC将为您管理内存使用。
除了将引用分配为'nil'或让引用超出范围之外,唯一需要考虑的是是否有一些额外的引用指向该对象(例如将其放入NSArray中),这些引用需要保留该对象。
@autoreleasepool
块来防止僵尸对象在内存中累积(ARC 最终会释放它们,但可能要等到线程本身终止)。除非您的作用域也包括一个@autoreleasepool
块,否则并不是所有东西离开作用域时都会被释放。 - aroth