本帖最后由 tz19900926 于 2015-9-25 21:19 编辑
一
@autoreleaspool的使用注意, 1、并不是所有放到自动释放池中的代码,产生的对象就会自动释放,如果需要释放,必须加入到自动释放池中 Person *p1 = [[Person new] autorelease]; 2如果对象调用了autorelease 但是调用autorelease的时候,没有在任何一个自动释放池中,此时该对象也不会被加入到自动释放池 3、我们只需要在自动释放池代码中调用autorelease就可以把对象自动加入到自动释放池
二 autorelease嵌套 自动释放池是特殊的栈结构,和内存栈区不一样 对象存在位于栈顶位置的自动释放池中 Person * p = [Person new]; @autoreleasepool{ @autoreleasepool{ @autoreleasepool{ [p autorelease]; } } } autorelease建议不要存放会占很大空间的对象 不要把大量循环操作放在同一个池子里,这样会造成内存峰值上升
2autorelease错误用法 Person *p = [Person new]; @autoreleasepool{ [p artorelease]; } [p release];
|