黑马程序员IOS-OC语言-内存管理、ARC
2015-05-08 16:39
441 查看
——- android培训、java培训、期待与您交流! ———-
关联方法
retain : 计数器 + 1
release : 计数器 - 1
retainCount : 获取当前计数器的值
dealloc : 当引用计数器为 0 时,对象被销毁,对象会最后调用 dealloc 方法
一般会重写 dealloc 方法。但一定不要自己调用 dealloc 方法
内存管理原则
@property参数 : 类的成员定义的时候设置参数
声明非OC对象
声明OC对象
id 对象
开发中引用的一个类的规范
两端循环引用的解决方法
注:调用了几次 autorelease 方法,释放池销毁时,执行几次 release 操作
autorelease 使用注意:
错误写法:
自动释放池的创建方式
2> IOS 5.0及以后
———————
autorelease 其他说明
系统自带的方法里面没有包含alloc、new、copy,说明返回的对象都是调用过 autorelease 方法的。
开发中经常会提供一些类方法,用于快速创建一个已经调用过 autorelease方法的对象,创建对象的方法中一般使用 self ,提高扩展性
+ (id) Xxxx
{
return [ [ [self alloc] init] autorelease];
}
规则 : 只要还有一个强指针变量指向对象,对象就会保持在内存中
指针类型
强指针 : 默认所有实例变量和局部变量都是强指针 strong
弱指针 : 弱指针指向的对象被回收后,弱指针会自动变为 nil 指针,不会引起野指针错误
使用注意
ARC 后不能调 release、retain、autorelease、retainCount 等方法
可以重写 dealloc 方法,但是不能调用 [super dealloc];
ARC 后,两端互相引用时,一端用 strong 、一端用 weak
@property 参数
@property : 想长期拥有某个对象,应该用 strong,其他对象用 weak
定义指针是可以设置指针类型,在类名前加关键字
——- android培训、java培训、期待与您交流! ———-
内存管理
内存管理 : 管理继承了 NSObject 的对象,对于基本数据类型无效原理 : 对象 --内部--> 引用计数器 默认创建对象时引用计数器 = 1; 为 0 时内存被释放
关联方法
retain : 计数器 + 1
release : 计数器 - 1
retainCount : 获取当前计数器的值
dealloc : 当引用计数器为 0 时,对象被销毁,对象会最后调用 dealloc 方法
一般会重写 dealloc 方法。但一定不要自己调用 dealloc 方法
内存管理原则
1> 谁创建,谁释放。谁通过 alloc、new或(mutable)copy 创建对象,谁 release 或 autorelease. 2> 谁 retain ,谁 release。 谁加了,谁减回去
@property参数 : 类的成员定义的时候设置参数
1.set方法内存管理的参数 * retain : release 旧值,retain 新值 * assign : 直接赋值(默认,适用于非OC对象类型) * copy : release 旧值,copy新值 2.是否要生成set方法 * readwrite : 同时生成setter和getter方法的声明和实现(默认) * readonly : 只生成 getter 方法的声明和实现 3.多线程管理 * nonatomic : 性能高 * atomic : 性能低(默认) 4.setter和getter方法的名称 * setter : 决定了set方法的名称 , 一定要有冒号 : (一般不使用) * getter : 决定了get方法的名称(一般用在BOOL类型)
声明非OC对象
@property (nonatomic ,assign) int xxxx;
声明OC对象
@property (nonatomic ,retain) Yyy *yyy;
id 对象
@property (nonatomic ,retain) id xxx;
@class
@class : 只标识类名 如:@class Person; // 仅仅告诉编译器,Person是一个类
开发中引用的一个类的规范
1> 在 .h 文件中用 @class 来声明类 2> 在 .m 文件中用 #import 来包含需要调用的类的 .h 文件
两端循环引用的解决方法
一端用 retain ; 一端用 assign
autorelease
1. 会将对象放到一个自动释放池中 2. 调用完 autorelease 方法后,对象的引用计数器不变 3. 方法调用后会返回对象本身 4. 当自动释放池被销毁时,会对池中所有对象指向一次release操作
注:调用了几次 autorelease 方法,释放池销毁时,执行几次 release 操作
autorelease 的好处:不用关心对象何时释放、以及何时调用 release 方法
autorelease 使用注意:
因为不能准确的控制对象回收时间,所以运行占用内存较大的对象会对内存造成负担。
错误写法:
1> 调用 alloc 方法之后调用了 autorelease 方法,又调用了 release 方法 @autoreleasepool{ Person *p = [ [ [Person alloc] init] autorelease]; // 引用计数器 = 1 [p release]; // 引用计数器 = 0 } // 引用计数器 - 1 ,造成野指针错误 ——————— 2> 连续多次调用 autorelease 方法 @autoreleasepool{ // 引用计数器 = 1 Person *p = [ [ [ [Person alloc] init] autorelease] autorelease]; } // 引用计数器 -1 ,造成野指针错误 ———————
自动释放池的创建方式
1> IOS 5.0之前 NSAutoreleasePool *pool = [ [NSAutoreleasePool alloc] init]; /*自动释放池(从NSAutoreleasePool对象创建到release)*/ [pool release]; // [pool drain]; // 淘汰的回收方法 drain
2> IOS 5.0及以后
@autoreleasepool { /* 自动释放池(大括号两端为起止) */ }
———————
autorelease 其他说明
系统自带的方法里面没有包含alloc、new、copy,说明返回的对象都是调用过 autorelease 方法的。
开发中经常会提供一些类方法,用于快速创建一个已经调用过 autorelease方法的对象,创建对象的方法中一般使用 self ,提高扩展性
+ (id) Xxxx
{
return [ [ [self alloc] init] autorelease];
}
ARC
ARC : IOS 5 之后加入的编译器特性,较于其他语言的垃圾回收(运行时特性)更加高效规则 : 只要还有一个强指针变量指向对象,对象就会保持在内存中
指针类型
强指针 : 默认所有实例变量和局部变量都是强指针 strong
弱指针 : 弱指针指向的对象被回收后,弱指针会自动变为 nil 指针,不会引起野指针错误
使用注意
ARC 后不能调 release、retain、autorelease、retainCount 等方法
可以重写 dealloc 方法,但是不能调用 [super dealloc];
ARC 后,两端互相引用时,一端用 strong 、一端用 weak
@property 参数
* strong : 成员变量是强指针 (适用于 OC 对象类型) * weak : 成员变量是弱指针 (适用于 OC 对象类型) * assign : 直接赋值 (适用于 非OC 对象类型)
@property : 想长期拥有某个对象,应该用 strong,其他对象用 weak
定义指针是可以设置指针类型,在类名前加关键字
__strong 强指针 __weak 弱指针
——- android培训、java培训、期待与您交流! ———-
相关文章推荐
- 黑马程序员之ios学习总结——11 OC语言的内存管理1
- 黑马程序员之ios学习总结——12 OC语言的内存管理2
- IOS开发---OC语言-㉘内存管理ARC循环调用
- 黑马程序员--ios基础--oc-内存管理之ARC、Block
- 黑马程序员——9、OC语言(内存管理和ARC)
- 黑马程序员——OC语言------内存管理和ARC
- 黑马程序员——OC语言学习——ARC机制、block代码块、protocol协议、protocol协议的应用
- 黑马程序员——OC基础:内存管理和自动引用计数(ARC)
- 黑马程序员——OC基础:内存管理和自动引用计数(ARC)
- 黑马程序员--IOS入学学习--9-OC中的内存管理
- 黑马程序员—OC语言基础—内存管理
- oc语言第七课 内存管理一——ios学习连载12
- 黑马程序员--ios基础--oc内存管理--@property参数、循环引用、autorelease
- 黑马程序员--ios基础--oc语言--类和对象
- 黑马程序员——IOS基础——OC内存管理-set方法内存管理及微博模型设计
- 黑马程序员学习笔记_OC之内存管理3ARC
- 黑马程序员 OC语言 - 5 内存管理
- 黑马程序员——OC语言加强---ARC使用特点及注意事项
- 黑马程序员---iOS基础---OC中的ARC、分类、block
- 黑马程序员——OC语言——内存管理