// autorelease
// 示例1.
Person *person = [[Person alloc]init];
// release 功能立即减1
// autorelease 延迟减1 将对象放入池子中,返回一个self
[person autorelease];
} // 代表池子将要销毁,对池子中所有的对象进行‘一次’release操作
//示例2. 自动释放池可以随意创建
// 不管这个对象是在池子中还是在池子外创建的,只要在池子中调用了autorelease 就会把对象放入到池子中,随着池子的销毁而执行一次release操作
Person *person1 = [[Person alloc]init];
@autoreleasepool {
[person1 autorelease];
}
// 示例3.
Person *person2 = [[Person alloc]init];
[person2 autorelease];
@autoreleasepool {
}
// 只有在自动释放池内调用了autorelease方法,才能够正确的将对象放入池子
// 示例4.
Person *person4 = [[Person alloc]init];
@autoreleasepool {
[person4 autorelease];
// [person4 autorelease];调用两次 重复释放 野指针错误
// 示例5.
Person *person5 = [[Person alloc]init];
@autoreleasepool {
@autoreleasepool {
[person5 autorelease];
}
}
// 示例6.
Person *person6 = [[Person alloc]init];
@autoreleasepool {
// [person6 autorelease]; 栈的原理 谁先销毁谁释放对象
@autoreleasepool {
[person6 autorelease];
}
}
autorelase在MRC中的用法等
// 创建chief
+ (id)chief {
Chief *chief = [[[[self class] alloc]init]autorelease];
return chief; // 类方法
}
// 创建food
- (Food *)chiefMakeFood {
Food *food = [[[Food alloc]init]autorelease];
food.name = @"辣条炒饭";
return food;
}
MRC内存管理2自动释放池
最新推荐文章于 2022-03-03 18:04:41 发布