首页 > 代码库 > OC 内存管理-02 autorelease 概念 以及用法
OC 内存管理-02 autorelease 概念 以及用法
(1) @autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作(2) 不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中(3) 只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中 (4) 如果在自动释放池中一个对象被多次释放[autorelease],那么会报野指针错误----------------------------验证代码---------------------//// main.m////内存管理原则(配对原则):只要出现了new,alloc,retain方法,就要配对出现release,autorelease//对象存入到自动释放池中,当这个池子被销毁的时候他会对池子中所有的对象进行一次release操作//怎么把对象存到池子中#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]){ /* 示例1 //自动释放池 //大括号代表池子的作用域 @autoreleasepool { //release 功能 retaincount - 1 //autorelease 好像功能也是 retaincount - 1 ? //1 Person * p = [[Person alloc] init];// [p release];//retainCount立即 -1 [p autorelease]; //autorelease方法的作用只是将对象放入到池子中,然后返回一个self NSLog(@"asdfasdf"); }//代表,池子将要被销毁,对池子中所有的对象进行一次release操作,[p release] 0 */ /* //autoreleasepool我么可以自己随意的创建 // 示例2 //1//不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中 Person * p = [[Person alloc ] init]; @autoreleasepool { [p autorelease]; }//p 0 */ // 示例3 /* //1 只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中 Person * p = [[Person alloc] init]; [p autorelease]; NSLog(@"aaaa"); @autoreleasepool { } NSLog(@"bbb"); */ //示例4 /* // 1 Person * p = [[Person alloc] init]; @autoreleasepool { [p autorelease];//加入第一次 [p autorelease];//加入第二次 NSLog(@"abc"); }//[p release]0 [p release] NSLog(@"cbd"); */ //示例5 /* //1 Person * p = [[Person alloc] init]; @autoreleasepool { @autoreleasepool { [p autorelease]; }//?[p release] 0 } */ Person * p = [[Person alloc] init]; @autoreleasepool { [p autorelease]; @autoreleasepool { [p autorelease]; }//[p release] 0 }//[p release]; return 0;}
OC 内存管理-02 autorelease 概念 以及用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。