pragma mark 自动释放池注意事项
pragma mark 概念
/**
自动释放池 是延迟释放对象
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
/*
Person *p = [[Person alloc]init];
@autoreleasepool {
// 2. 在自动释放池中创建了对象,一定要调用autorelease,才会将对象放入自动释放池中
// Person *p =[[Person alloc]init];
// [p run];
// 3. 只要在自动释放池中 调用 autorelease, 就会将对象放入自动释放池
p = [p autorelease];
[p run];
}
// 1.一定要在自动释放池中调用autorelease,才会将对象放入自动释放池中
// Person *p = [[[Person alloc]init]autorelease];
*/
#warning 注意事项
// 4. 一个程序中可以创建N个自动释放池,并且自动释放池还可以嵌套
// 如果存在多个自动释放池的时候, 自动释放池是以"栈"的形势存储的 [此处的栈是一种数据结构,不是之前说的"栈、堆"是存储空间]
// 栈的特点: 先进后出 (羽毛球桶就是栈 -- 先进后出)
// 给一个对象发送一条 autorelease消息, 永远会将对象放到 栈顶的 自动释放池
@autoreleasepool { // 创建第一个自动释放池
@autoreleasepool { // 创建第二个自动释放池
@autoreleasepool { // 创建第三个自动释放池
Person *p = [[[Person alloc]init]autorelease];
[p run];
} // 第三个释放池销毁
Person *p = [[[Person alloc]init]autorelease];
[p run];
} // 第二个释放池销毁
} // 第一个释放池销毁
return 0;
}
Person.h //人类
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (void)run;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)run
{
NSLog(@"%s",__func__);
}
-(void)dealloc
{
NSLog(@"%s",__func__);
[super dealloc];
}
@end
网友评论