黑马程序员—Objective-C基础_内存管理(2)
2014-03-27 00:15
239 查看
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- autorelease方法 1> 会将对象放到一个自动释放池中 2> 当自动释放池被销毁时,会对池内所有对象做一次release操作 3> autorelease方法会返回对象本身 4> 调用autorelease方法之后,对象的计数器不变 自动释放池 在程序运行过程中,可以创建多个自动释放池。自动释放池以栈的形式存在内存中(先进后出) 当对象调用autorelease方法时,会将该对象放到栈顶的释放池 创建自动释放池 int main() { // 创建自动释放池 @autoreleasepool{ // 创建对象,并调用autorelease方法 Person *p = [[[Person alloc] init] autorelease]; } // 自动释放池销毁,对象销毁 return 0; } 当对象占用内存较大时,不要使用autorelease。调用autorelease之后,不用再使用release。 一般来说,除了alloc、new或copy之外的方法创建的对象都被声明了autorelease。 开发中可以提供一些类方法来快速创建已经autorelease的对象 + (id)person { // 创建对象时,不直接使用类名,使用self return [[[self alloc] init] autorelease] } ARC(Automatic Reference Counting) 在ARC模式下把指针分为两种 强指针:默认情况下,所有指针都是强指针__strong 弱指针:__weak ARC的判断准则:只要没有强指针指向对象,就会释放对象 @interface Person : NSObject @property(strong,nonatomic) Dog *dog; @end @implementation Person // 重写dealloc -(void)dealloc { NSLog(@"Person被杀死了"); // [super dealloc];不允许调用 } @end @interface Dog : NSObject @property(weak,nonatomic) Person *person; @end @implementation Dog - (void)dealloc { NSLog(@"Dog被杀死了"); } @end int main() { // ARC模式下的循环调用 Person *p = [[Person alloc] init]; Dog *d = [[Dog alloc] init]; p.dog = d; d.person = p; return 0; }// 程序结束,所有对象被销毁 ARC特点 1> 不允许调用release、retain、retainCount 2> 允许重写dealloc,但是不允许调用[super dealloc] 3> @property参数 strong:成员变量是强指针(适用于OC对象类型) weak:成员变量是弱指针(适用于OC对象类型) assign:适用于非OC对象类型 4> 用strong替代retain ARC中的循环引用:strong替代retain,weak替代assign ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net |
相关文章推荐
- 黑马程序员—Objective-C基础_内存管理(1)
- Java NIO框架Netty教程(十)-Object对象的连续收发解析分析
- 黑马程序员—Objective-C基础_block、协议
- 黑马程序员—Objective-C基础_分类以及类的本质
- 黑马程序员—Objective-C基础_构造方法
- 黑马程序员—Objective-C基础_封装、继承、多态
- Java NIO框架Netty教程(九)-Object对象编/解码
- java.lang.NoClassDefFoundError: org/objectweb/asm/Type
- Objective-C中单例模式(Singletons)的实现
- System.Rtti.TRttiObject.GetAttributes 简例
- 第三讲 CObject类
- OpenStack Object Storage(Swift)
- object/listener模式
- Object C学习笔记20-结构体
- 黑马程序员_object c学习日记①_类的声明定义、点语法及成员变量作用域
- 在知道崩溃函数偏移地址的情况下,如何定位函数名和行号
- Objective-C(2)
- CGContext画线
- Face++ 第三方类库的使用文档
- NSDictionary: objectForKey: valueForKey: