问题描述
- IOS 内存管理 AutoRelease问题
-
如下两段代码, 为何第二段代码释放了内存之后还会有18.5MB的内存?? 而第一段就比较正常, 内存申请前和经过释放后差不多, 请指点~~~
创建的OS X的Command Line 工程, 不知是否会有区别于IOSint main(int argc, const char * argv[]) { @autoreleasepool { //程序开始执行,内存为920KB // insert code here... @autoreleasepool { for (int i = 0; i < 1000000; i++) { @autoreleasepool { NSString* str = [NSString stringWithUTF8String:"asdfasdfasdfsadf"]; } } int i = 0; //经过不断申请和释放后, 内存为976KB, 基本差不多 } NSLog(@"end"); //内存为1004KB } return 0; }
int main(int argc, const char * argv[]) { @autoreleasepool { //程序开始执行,内存为920KB // insert code here... @autoreleasepool { for (int i = 0; i < 1000000; i++) { NSString* str = [NSString stringWithUTF8String:"asdfasdfasdfsadf"]; } int i = 0; //经过不断的内存申请, 已达到63MB } NSLog(@"end"); //此时, 上面申请的应该已经全部释放, 但是内存为18.5MB } return 0; }
解决方案
自动释放池是等到它自己的大括号走完了才会释放,你的第一段demo,在你int i = 0时,里面的那个释放池已经是放过了,而外面的这个还没有释放,当然会有,你还不明白自动释放池的释放机制和手动释放的区别
时间: 2024-10-24 15:13:45