NSAutoreleasePool和@autoreleasepool块有什么区别?

Imr*_*ran 12 memory-management objective-c nsautoreleasepool ios

我想知道NSAutoreleasePool和@autoreleasepool block之间有什么区别.我已经经历了一些问题,但没有得到任何令人满意的答案.到目前为止我才知道在ARC中我们不能使用NSAutoreleasePool和@autoreleasepool在这两种ARC enabled and disabled情况下都可以使用块.因此,它们在内部是不同的,以这种方式表现.

是否有必要在禁用弧的环境中释放对象,即使我们使用的是NSAutoreleasePool或@autoreleasepool块,或者它们会自动执行?还有,如果ARC自动释放内存,那么为什么我们使用@autoreleasepool block.Please给我一个简短的概述用例子.

Ano*_*dya 7

你提到的一个区别:

在ARC中,我们不能使用NSAutoreleasePool,并且@autoreleasepool块可以在ARC启用和禁用情况下使用.

但是对于你的这句话:

此外,如果ARC自动释放内存,那么为什么我们使用@autoreleasepool块

ARC不会自动释放内存!这是一个编译时功能,每个对象都被发送autorelease到本地池.一旦其生命周期和范围结束,池操作系统将自行释放,从而释放所有对象.

您可以参考此博客是否@autoreleasepool阻止更高效?

是否有必要在禁用弧的环境中释放对象,即使我们使用的是NSAutoreleasePool或@autoreleasepool块,或者它们会自动执行?

是的,你需要释放对象.根据定义(@/NS)autoreleasepool,它不处理您的对象保留计数,但它仅用于以下内容:

自动释放池块提供了一种机制,您可以放弃对象的所有权,但避免立即释放它(例如从方法返回对象时).