【发布时间】:2011-04-22 03:29:28
【问题描述】:
我仍在思考 Objective-C 中内存管理的一些细微差别,并提出了以下我不确定的案例:
+ (NSDecimalNumber*)factorial: (NSDecimalNumber *)l {
NSDecimalNumber *index = l;
NSDecimalNumber *running = [NSDecimalNumber one];
for (; [index intValue] > 1; index = [index decimalNumberBySubtracting:[NSDecimalNumber one]]) {
running = [running decimalNumberByMultiplyingBy: index];
}
return running;
}
在这里,decimalNumberByMultiplyingBy 和 decimalNumberBySubtracting 将创建大量 NSDecimalNumber,据我了解,它们最终会自动释放,但我担心直到那个时候包含的程序会占用大量内存。
我应该在某处引入自动释放池吗? (如果是的话在哪里?)这会对性能产生显着影响(与使用这么多内存的副作用相比)?
自动释放是否适合在这里使用?我是否应该考虑打破循环并在完成后手动释放内存?
这可能是一个 n00b 问题,但我试图了解在这种情况下最佳做法是什么。
【问题讨论】:
-
注意:由于 NSDecimalNumber 的范围限制,我意识到这不会是计算阶乘的超级有效方法,只是碰巧在我的脑海中出现了这个例子。
标签: objective-c performance memory-management autorelease