pragma mark autorelease基本使用
pragma mark 概念
/**
autorelease 基本概念
作用
会对池子里面的所有对象做一次release操作
好处
不用再关心对象的释放时间
不用再关心什么时候调用release
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
/*
@autoreleasepool {
Person *p = [[Person alloc]init];
[p run];
#warning 时时刻刻都关注对象的什么时候被释放
[p release];
p = nil;
// [Person run]: message sent to deallocated instance 0x1006060f0
// 野指针的错误 : 给一个已经 释放的对象 发送消息
[p run];
}
*/
/*
@autoreleasepool { // 创建一个自动释放池
Person *p = [[Person alloc]init];
// 不用关心对象什么时候释放,只要能够访问p的地方都可以使用p
[p autorelease]; // 只要调用了autorelease, 那么久不用·调用release了
// [p retain];
[p run];
} // 自动释放池销毁了,给自动释放池中所有的对象 发送 一条release消息
*/
#warning autorelease 其它写法 @autoreleasepool ios5之后写的
/*
@autoreleasepool
{
Person *p = [[[Person alloc]init]autorelease];
[p autorelease];
[p run];
}
*/
#warning auterelease iOS5之前的创建方式
// 创建一个自动释放池
// 自动释放池只是将release延迟了而已,
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
Person *p = [[Person alloc]init];
// 销毁一个自动释放池
[pool release];
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
网友评论