【发布时间】:2014-01-29 03:51:38
【问题描述】:
请帮我解释一下为什么 @autoreleasepool 比 NSAutoreleasePool 快 6 倍。
然后转到转换项目时的常见问题 -- 转到第三个项目符号
【问题讨论】:
标签: objective-c
请帮我解释一下为什么 @autoreleasepool 比 NSAutoreleasePool 快 6 倍。
然后转到转换项目时的常见问题 -- 转到第三个项目符号
【问题讨论】:
标签: objective-c
最终,这一切都归结为对 objc_autoreleasePoolPush 和 objc_autoreleasePoolPop 的调用。那么问题是: [[NSAutoreleasePool alloc] init]; 有多少开销。和[池排水];添加在这些调用之上,因为它必须在内部拥有它们。
答案显然是“相当多”。它的简单实现必须分配整个对象并释放它,但我们可以放心地假设 Apple 已经优化了 NSAutoreleasePool 比这更多(例如,通过缓存池实例)。尽管如此,相对于函数调用而言,获取所涉及的对象会产生一些开销。
【讨论】:
NSAutoreleasePool 分配一个NSAutoreleasePool 对象(或从缓存中获取现有对象); @autoreleasepool 没有。 NSAutoreleasePool 发送多个 Objective-C 消息; @autoreleasepool 没有。