NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *data = nil;
data = [prefs dataForKey:[NSString stringWithFormat:KEY_STR, index]];
NSData实际上有1.5M大小,我可以在完成数据后立即释放内存吗?
答案 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问题。将数据写入文件。