Objective-C学习_内存管理学习笔记

 

内存泄漏 : 应当废弃的对象在超出生命周期后继续存在

内存管理 : 遵守配对原则,有alloc/new/copy/mutableCopy就要有相对应的release或autorelease

原因 : Oc对象是在堆里面的(动态分配),堆里面的内存由我们程序员来管理 ;


对象操作


Objective –c 对应方法


生成并持有对象


alloc/new/copy/mutableCopy等


持有对象


retain 方法


释放对象


release方法


废弃对象


dealloc方法(系统自动调)

内存管理的思考方式 (文中“自己”表示 : “对象的使用环境”或“开发人员”):

1.自己生成的对象,自己持有

2.非自己生成的对象,自己也能持有

3.不再需要自己持有的对象时释放

4.非自己持有的对象无法释放

总结 :

1.调用alloc或是retain方法之后,引用计数值 + 1

2.调用release方法之后,引用计数值 - 1

3.当引用计数值为0时,调用dealloc方法废弃对象

4.调用retianCount,可以返回引用计数器的个数

多对象内存管理步骤:(使用@property就会生成下面的set方法)

1.在set方法中调用传进来的参数 retain方法

   -(void)setRoom(Room*)room

  {

if(_room != room){//判断传进来的对象是否是当前的对象

[_room relase];//释放掉当前的对象

    _room = [room retain];//引用新的对象,赋值

  }

2.在dealloc方法中调用release

-(void)dealloc 

{

  [_room release];  

  _room = nil;

  [super dealloc];

}

autorelease 使用方法:

  1. 生成并持有NSAutoreleasePool对象(@autoreleasePool)
  2. 调用已分配对象的autorelease实例方法(retainCount不会增加,只是放在释放池中而已)
  3. 废弃NSAutoreleasePool对象

#import和@class的使用 :

#import  :包含所有的信息,包含引用类的变量和方法

@class      : 可以简单地引用一个类(仅仅告诉编译器,这个是一个类)

@class和#import的主要区别 : #import的内容改变了就要拷贝一次。

如何使用 :

(1)在.H文件中使用@class

(2)在.M文件中是用得是#import,真正使用的时候才要#import

(3)A.h里#import “B”,B.h里#import “A”,导致错误 (Unknown type name……)

解决相互引用(retain): 一端用retain,一端用assign

常见知识点或注意点:

(1)刚创建一个对象的计数器就为1

(2)重写deallloc方法的时候 : [super dealloc]必须放在最后面

(3)如果释放了对象,把所指向的地址赋值为nil,可以防止野指针操作

(4)给空指针发送消息是不会出错的,没有什么现象

(5)调用retain方法会返回对象本身

(6)指针赋值并没有调用retain,需要手动调用retain

(7)@property 生成set方法已经实现了上面的set方法和get方法,assign是默认的写法

(8)取得一个非自己生成并自己持有的对象 : id obj=[NSMutableArray array];  持有对象 : [obj retain];(类方法里面自动调了autorelease)

(9)如果使用非自己持有的对象,这个程序会崩溃。

(10)__weak (只能用于ios5以上):可以避免循环引用,__修饰的变量不持有对象

(11)占用内存较大的不要放在autoreleasepool,性能问题

(12)重写alloc 方法的时候一定要使用self,这样子类也可以创建相对应的对象

(13)instancetype,比id更加智能,可以在编译的时候就可以发现问题

(14)如果直接使用   __weak UIView * view = [[UIView alloc]init];会发出警告 : Assigning retained object to weak variable……

(15)弱应用优点 : 在持有某对象的弱引用的时,若该对象被废弃,则弱引用将会自动失效且处于nil(被赋值的状态)相对于__unsafe_unretained更安全

(16)非OC对象是放在栈中,指针变量(4个字节)存在栈中

时间: 2024-12-09 13:22:30

Objective-C学习_内存管理学习笔记的相关文章

C++内存管理学习笔记(6)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9120635 /************************

Linux内存管理学习笔记——内存寻址

最近开始想稍微深入一点地学习Linux内核,主要参考内容是<深入理解Linux内核>和<深入理解Linux内核架构>以及源码,经验有限,只能分析出有限的内容,看完这遍以后再更深入学习吧. 1,内存地址 逻辑地址:包含在机器语言中用来指定一个操作数或一条指令的地址. 线性地址:一个32位无符号数,用于直接映射物理地址 物理地址:片上引脚寻址级别的地址 2,逻辑地址->线性地址 2.1 段选择符与段寄存器 逻辑地址:段选择符(16位)+段内偏移(32位) index:在GDT或L

C++内存管理学习笔记(7)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9178099 /************************

C++内存管理学习笔记(5)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9112123 /************************

C++内存管理学习笔记(3)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9078965 /************************

C++内存管理学习笔记(2)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9059883 /************************

C++内存管理学习笔记(4)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9094793 /************************

C++内存管理学习笔记(1)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /* Welcome>晓的博客:zhangxiaolong.org /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details

c++内存管理学习纲要

本系列文章,主要是学习c++内存管理这一块的学习笔记. 时间:6.7-21 之下以技术内幕的开头语,带入到学习C++内存管理的技术中吧: 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,因此要想成为C++高手,内存管理一关是必须要过的! 笔记汇总: 1.C++内存管理学习笔记(1) 2.C++内存管理学习笔记(2) 3.C++内存管理学习笔记(3) 4.C++内存管理学习笔记(4) 5.C++内存管理学习笔记(5) 6.C++内存管理学习笔记(6) 7.C++内存管理学习笔记(7