黑马程序员(OC内存管理)
来源:互联网 发布:java getservername 编辑:程序博客网 时间:2024/05/20 09:47
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
今天我们来看看OC语法中另外一个重要的知识点:OC内存管理
OC内存管理的范围:任何继承了NSObject的对象,对基本数据类型无效
它的原理:
1、每个对象内部都保存了一个与之相关联的整数,称为引用计数器。
2、当使用alloc、new、或者copy创建一个对象时,对象的引用计数器被设置为1
3、给对象发送一条retain消息,可以使引用计数器值+1
4、给对象发送一条release消息,可以使引用计数器值-1;
5、当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收,系统也会自动向对象发送一条dealloc消息。一般会重写dealloc方法,在这里释放相关资源。一定不要直接调用dealloc方法
6、可以给对象发送retainCount消息获得当前的引用计数器值。
内存管理原则:
1、谁创建、谁释放,如果你通过alloc、new或copy来创建一个对象,那么你必须调用release或autorelease.换句话,不是你创建的,就不用你去释放。
2、一般来说,除了alloc、new或copy之外的方法创建的对象都被声了autorelease
3、谁retain,谁release。只要你调用了retain,无论这个对象如何生成的,你都要调用release.
retain点语法
OC内存管理正常情况要使用大量的retain和release操作;
点语言可以减少使用retain和release的操作。
编译器对于retain展开形式:
@property (retain)Dog *dog;
展开为:-(void) setDog:(Dog *)aDog;
-(Dog *)dog;
@synthesize dog = _dog; //(retain属性)
展开为:-(void) setDog:(Dog *)aDog{
if(_dog != aDog){
[_dog release];
_dog = [aDog retain];
}
};
-(Dog *)dog{
return _dog;
};
copy属性:copy属性是完全把对象重新拷贝一份,计数器重新设置为1,和之前拷贝的数据完全脱离关系
OC的内存管理,归根结底要记住一条黄金法则:谁创建谁释放,谁retain谁释放。
- 黑马程序员-----OC内存管理(一)
- 黑马程序员-----OC内存管理(二)
- 黑马程序员-----OC内存管理(三)
- 黑马程序员(OC内存管理)
- 黑马程序员--OC--内存管理(一)
- 黑马程序员--OC--内存管理(二)
- 黑马程序员 — OC(内存管理)
- 黑马程序员-OC-内存管理
- 黑马程序员--oc:内存管理
- [黑马程序员][OC]内存管理
- 黑马程序员-OC内存管理
- 黑马程序员---OC--内存管理
- 黑马程序员---oc 内存管理
- 黑马程序员-OC-内存管理
- 黑马程序员-OC内存管理
- 黑马程序员——oc篇(三)内存管理
- 黑马程序员-OC笔记(五)内存管理
- 黑马程序员——OC内存管理(一)
- 二叉树的前序、中序、后序遍历
- C++之class和struct的异同点
- 通付盾安全加固——拓展安卓内核安全边界
- java抽象类
- window server 2008 英文版tomcat运行乱码问题
- 黑马程序员(OC内存管理)
- 做网站用UTF-8编码还是GB2312编码?
- WIFI无线网络5G 5.8G(5.8GHz)频谱各信道及对应频率
- Largest prime factor
- ActiveMQ采用static方式进行集群处理
- SVN的分支、主干合并的使用说明
- 搜狗商业数据库自动化运维平台
- linux 文件查找
- 原版win7 install.wim在哪?