@autoreleasepool学习记录
来源:互联网 发布:macbook air mac系统 编辑:程序博客网 时间:2024/05/29 16:25
1. 和Java的GC不同,这个自动释放池是“半自动的”。当自动释放池销毁的时候,里面所有的调用过autorelease方法的对象调用一次release方法。
2. 如何创建一个自动释放池:@autoreleasepool{
}
大括号表示里面所有的对象会被添加到这个自动释放池中。
当大括号结束的时候销毁自动释放池。
3. 怎样将对象加入自动释放池呢?只需要对对象发送一条autorelease消息即可。该对象会被添加到最近的一个自动释放池中。(栈顶的释放池(消息循环Runloop(类似于Android的消息队列)))
4. 发送autorelease消息的实质:把对象的release方法的调用延迟了。当其所在的自动释放池销毁了,才调用对象的release方法。
2. 如何创建一个自动释放池:@autoreleasepool{
}
大括号表示里面所有的对象会被添加到这个自动释放池中。
当大括号结束的时候销毁自动释放池。
3. 怎样将对象加入自动释放池呢?只需要对对象发送一条autorelease消息即可。该对象会被添加到最近的一个自动释放池中。(栈顶的释放池(消息循环Runloop(类似于Android的消息队列)))
4. 发送autorelease消息的实质:把对象的release方法的调用延迟了。当其所在的自动释放池销毁了,才调用对象的release方法。
5. 注意:autorelease不会改变引用计数器。它延迟调用的release方法才会使引用计数器-1.
6. 可以利用autorelease方法,快速创建一个类并且不需要考虑内存。使用静态方法,并且方法名和类名相同,只是首字母改成小写。系统自带的很多类都是如此。
注意:下面的代码是在ARC模式关闭时:
Student.h
#import <Foundation/Foundation.h>@interface Student : NSObject//静态方法快速创建一个类+(id) student;@end
Student.m
#import "Student.h"@implementation Student+(id)student { Student *student = [[[Student alloc] init]autorelease]; return student;}-(void)dealloc { NSLog(@"%@被释放了", self); [super dealloc];}@end
main.m
#import <Foundation/Foundation.h>#import "Student.h"int main(int argc, const char * argv[]){ @autoreleasepool { //Student *student = [[[Student alloc] init] autorelease]; Student *student = [Student student]; } return 0;}
7. 注意点:由于autorelease是延迟release,尽量不要对大的内存调用这个方法,因为会被延迟到自动释放池销毁后才release。
0 0
- @autoreleasepool学习记录
- @autoreleasepool
- autoreleasepool
- AutoreleasePool
- autoreleasePool
- @AUTORELEASEPOOL
- autoreleasepool
- autoreleasepool
- @autoreleasepool
- @AUTORELEASEPOOL
- Autoreleasepool
- ios学习路线—Objective-C(autoreleasepool)
- __weak & autoreleasepool
- AutoReleasePool 原理
- AutoreleasePool 分析
- RunLoop-AutoreleasePool
- AutoreleasePool简记
- Objective-C学习笔记1--windows+GNUstep环境下不能使用@autoreleasepool?
- SAE安装第三方插件
- Repeat Number
- 策略模式Strategy——回家乘什么车?
- maven学习笔记(一)--环境搭建
- 【c/c++ 算法/数据结构】 邻接矩阵表示图,深度,广度优先遍历 算法设计+代码+图片
- @autoreleasepool学习记录
- WTL界面自绘系列-预备
- 损失函数(loss function)
- Sapphire手机按钮检测控件Sapphire Buttons Utility详细介绍
- nodejs 批处理执行 app.js
- Activex、OLE、COM、OCX、DLL之间的区别(转)
- 重启电脑之后文件丢失怎么办
- JAVA-线程安全性
- 云计算