黑马程序员----第七篇 OC内存管理(二)
2015-05-06 21:29
204 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
三、autorelease总结
1、简介
1>给某个对象发送一条autorelease消息时,就会将这个对象加到一个自动释放池中。
2>当自动释放池销毁时,会给池子里面的所有对象发送一条release消息。
3>调用autorelease方法时并不会改变对象的计数器,并且会返回对象本身。
4>autorelease实际上只是把对release的调用延迟了,对于每一次autorelease,系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Release。
5>程序中可以有多个自动释放池。自动释放池其实并不包含实际的对象本身,仅仅是对释放的对象的引用。通过向目前的自动释放池发送一条autorelease 消息,可以将一个对象添加到其中。
2、错误写法与自动释放池的创建:
(1)错误写法
1> alloc之后调用了autorelease,又调用release
@autoreleasepool
{
// 1
Person *p = [[[Person alloc] init] autorelease];
// 0
[p release];
}
2> 连续调用多次autorelease
@autoreleasepool
{
Person *p = [[[[Person alloc] init]autorelease] autorelease];
}
(2)自动释放池的创建方式
1> iOS 5.0前
NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];
[pool release]; // [pool drain];
2> iOS 5.0 开始
@autoreleasepool
{
}
四、ARC总结
1、简介
1>ARC是自iOS5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切
2>ARC 是编译器特性,而不是iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化
2、基本原理
1>规则
ARC的规则非常简单:只要还有一个强指针变量指向对象,对象就会保持在内存中。
2>强指针和弱指针
默认所有实例变量和局部变量都是Strong指针。
弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误。
3、使用注意:
不能调用release、retain、autorelease、retainCount
可以重写dealloc,但是不能调用[superdealloc]
@property : 想长期拥有某个对象,应该用strong,其他对象用weak
(1)其他基本数据类型依然用assign
(2)两端互相引用时,一端用strong、一端用weak
三、autorelease总结
1、简介
1>给某个对象发送一条autorelease消息时,就会将这个对象加到一个自动释放池中。
2>当自动释放池销毁时,会给池子里面的所有对象发送一条release消息。
3>调用autorelease方法时并不会改变对象的计数器,并且会返回对象本身。
4>autorelease实际上只是把对release的调用延迟了,对于每一次autorelease,系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Release。
5>程序中可以有多个自动释放池。自动释放池其实并不包含实际的对象本身,仅仅是对释放的对象的引用。通过向目前的自动释放池发送一条autorelease 消息,可以将一个对象添加到其中。
2、错误写法与自动释放池的创建:
(1)错误写法
1> alloc之后调用了autorelease,又调用release
@autoreleasepool
{
// 1
Person *p = [[[Person alloc] init] autorelease];
// 0
[p release];
}
2> 连续调用多次autorelease
@autoreleasepool
{
Person *p = [[[[Person alloc] init]autorelease] autorelease];
}
(2)自动释放池的创建方式
1> iOS 5.0前
NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];
[pool release]; // [pool drain];
2> iOS 5.0 开始
@autoreleasepool
{
}
四、ARC总结
1、简介
1>ARC是自iOS5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切
2>ARC 是编译器特性,而不是iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化
2、基本原理
1>规则
ARC的规则非常简单:只要还有一个强指针变量指向对象,对象就会保持在内存中。
2>强指针和弱指针
默认所有实例变量和局部变量都是Strong指针。
弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误。
3、使用注意:
不能调用release、retain、autorelease、retainCount
可以重写dealloc,但是不能调用[superdealloc]
@property : 想长期拥有某个对象,应该用strong,其他对象用weak
(1)其他基本数据类型依然用assign
(2)两端互相引用时,一端用strong、一端用weak
相关文章推荐
- 黑马程序员_OC内存管理
- 黑马程序员--java技术blog---第七篇:GUI
- 黑马程序员--ios基础--oc内存管理
- 黑马程序员-----OC内存管理(二)
- 黑马程序员_OC内存管理
- 黑马程序员-oc内存管理(Q)
- 黑马程序员—IOS加强视频—oc内存管理
- [黑马程序员]第七篇:枚举
- 黑马程序员-----------ios培训 oc内存管理(一)
- 黑马程序员-----OC内存管理(三)
- 第七篇 黑马程序员-多态与String类以及基本数据类型的包装类
- 黑马程序员学习log第七篇基础知识:JAVA的面向对象之GUI总结
- 黑马程序员——OC内存管理(一)
- 黑马程序员--基础加强--第七篇--注解
- 18、黑马程序员-OC内存管理
- 黑马程序员————Java5的注解小结(第七篇)
- 黑马程序员——IOS基础——OC内存管理ARC
- 黑马程序员-[OC语言] 第七篇:foundation框架之NSArray、NSDitctionary 基本用法
- <黑马程序员> 第七篇:IO
- 黑马程序员----第六篇 OC内存管理(一)