如何手动释放自动释放池分配的内存

时间:2011-11-11 12:46:18

标签: ios

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *data = nil;
data = [prefs dataForKey:[NSString stringWithFormat:KEY_STR, index]];

NSData实际上有1.5M大小,我可以在完成数据后立即释放内存吗?

2 个答案:

答案 0 :(得分:1)

您需要为此操作创建自己的NSAutoreleasePool:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Your code here
[pool drain];

但是除非你有充分的理由,你应该知道,一旦你完成处理你正在处理的事件并且应用程序返回到主运行循环,默认的自动释放池将耗尽你的记忆将会被释放。所以除非你认为有充分的理由,否则我不会担心。

答案 1 :(得分:0)

没有什么可以阻止你创建一个对象并在自动释放池中释放它(自动释放池只负责释放在其中创建的自动释放的对象)

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *array = [[NSArray alloc] init]
[array release]

[pool release];

完全没问题。事实上,鉴于主运行循环有自己的自动释放池并且定期耗尽它,你不可避免地处于这种情况。如果您使用ARC,则不适用。

我还想同意stevex,将兆字节存储到NSUserDefaults是错误的,并且会让你遇到iCloud问题。将数据写入文件。