// // 文件:Person.h // 项目:博客笔记 // 作者:葬花 桥 // 日期:14-5-10 // 版权: Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic,retain) NSString *name; @property (nonatomic,assign) int age; @end
//
// 文件:Person.m
// 项目:博客笔记
// 作者:葬花 桥
// 日期:14-5-10
// 版权: Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"%@--被回收了!", _name);
[super dealloc];
}
@end//
// main.m
// autorelease与自动释放池
//
// Created by 葬花 桥 on 14-5-10.
// Copyright (c) 2014年 itcast. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool // 自动释放池
{
Person *p = [[[Person alloc] init] autorelease]; // 实例化Person类的对象
p.age = 10; // 调用setAge:方法
p.name = @"桥"; // 调用setName:方法
} // 自动释放池过期时给p指向的对象发送release消息
NSLog(@"main函数结束之前!");
return 0;
}三、自动释放池的应用
自动释放池的应用还是比较多的,在上几篇的笔记中小桥没有提系统对象的内存管理,因为苹果官方已经写好了内存管理的代码封装在类中。比如NSString = @"小桥 ",字符串对象的内存管理封装在类内部,在外面就不用我们手动release。在这里小桥模拟一下它的封装过程,在Person声明部分声明一个类方法,方法名为 person(规范写法:类名但是第一个字母小字),这与C++的默认构造方法形式有一点相似但不同,在实现文件中实现这个方法
//
// 文件:Person.m
// 项目:博客笔记
// 作者:葬花 桥
// 日期:14-5-10
// 版权: Copyright (c) 2014年 itcast. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"%@--被回收了!", _name);
[super dealloc];
}
// 类方法的实现
+ (id)person
{
Person *p = [[[Person alloc] init] autorelease]; // 创建一个对象,并调用autorelease方法加到自动释放池
return p; // 返回这个对象的地址
}
@end
下面这张图可以间接证明:
---------------------- IOS开发、Android培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com
黑马程序员-OC学习笔记之autorelease与自动释放池,布布扣,bubuko.com
黑马程序员-OC学习笔记之autorelease与自动释放池
原文:http://blog.csdn.net/wangqinqian/article/details/25482895