1、内存管理的范围:
在oc中我们只对继承了NSObject对象的对象进行内存管理。对于非对象类型无效。例如:(int,char,float,double,enum,struct)等数据类型我们不需要对其进行内存管理。
2、变量的存储方式:
非oc对象类型的变量一般会放在栈里面(栈内存会被系统自动回收)

3、引用计数:
系统是根据每一个对象的引用计数器,来管理对象是否被销毁的,引用计数表示这个对象当前有多少个对象正在对其进行引用,每个OC对象的内部都有一个4个字节的存储空间来存放引用计数器。
4、引用计数器的作用:
系统是根据每一个对象的引用计数器,来管理对象是否被销毁,当一个对象的引用计数为0时,表示当前没有任何变量对其进行引用,此时系统会调用dealloc方法对其进行销毁。
任何一个对象,刚被创建的时候,默认引用计数为1
即:当我们使用alloc、new、copy来创建一个对象时,对象的引用计数默认为1
5、引用计数器的操作:
当我们给对象发送一条retain消息,可以使对象的引用计数 + 1
当我们给对象发送一条release消息时,可以使对象的引用计数 -1
当我们给对象发送一条retainCount消息时,可以查看对象当前的引用计数值。
注意:当我们向对象发送release消息时,并不是代表对象被销毁或回收,仅仅是让对象的引用计数-1,如果此时刚好对象的引用数变成0,则对象才会被销毁。
6、dealloc方法:
当一个对象的引用计数为0时,系统会自动调用这个方法,对对象的内存进行释放,注意:这个方法我们不能主动调用。
我们一般会在自己的类中,重写dealloc方法,来释放相关资源,注意:当我们重写dealloc方法时,一定要调用[super dealloc]方法,并且放在整个方法的总后面。
例:
- (void)dealloc
{
……….
………..
……….
[super dealloc];//此句代码一定要放在最后面调用。
}
注意:
1、不能主动去调用dealloc方法
2、一旦对象被回收了,它占用的内存就不再可用,如果坚持使用则会导致野指针错误。
在oc中我们只对继承了NSObject对象的对象进行内存管理。对于非对象类型无效。例如:(int,char,float,double,enum,struct)等数据类型我们不需要对其进行内存管理。
2、变量的存储方式:
非oc对象类型的变量一般会放在栈里面(栈内存会被系统自动回收)
oc对象存放到堆内存里面(这个要程序员自己进行释放)
3、引用计数:
系统是根据每一个对象的引用计数器,来管理对象是否被销毁的,引用计数表示这个对象当前有多少个对象正在对其进行引用,每个OC对象的内部都有一个4个字节的存储空间来存放引用计数器。
4、引用计数器的作用:
系统是根据每一个对象的引用计数器,来管理对象是否被销毁,当一个对象的引用计数为0时,表示当前没有任何变量对其进行引用,此时系统会调用dealloc方法对其进行销毁。
任何一个对象,刚被创建的时候,默认引用计数为1
即:当我们使用alloc、new、copy来创建一个对象时,对象的引用计数默认为1
5、引用计数器的操作:
当我们给对象发送一条retain消息,可以使对象的引用计数 + 1
当我们给对象发送一条release消息时,可以使对象的引用计数 -1
当我们给对象发送一条retainCount消息时,可以查看对象当前的引用计数值。
注意:当我们向对象发送release消息时,并不是代表对象被销毁或回收,仅仅是让对象的引用计数-1,如果此时刚好对象的引用数变成0,则对象才会被销毁。
6、dealloc方法:
当一个对象的引用计数为0时,系统会自动调用这个方法,对对象的内存进行释放,注意:这个方法我们不能主动调用。
我们一般会在自己的类中,重写dealloc方法,来释放相关资源,注意:当我们重写dealloc方法时,一定要调用[super dealloc]方法,并且放在整个方法的总后面。
例:
- (void)dealloc
{
……….
………..
……….
[super dealloc];//此句代码一定要放在最后面调用。
}
注意:
1、不能主动去调用dealloc方法
2、一旦对象被回收了,它占用的内存就不再可用,如果坚持使用则会导致野指针错误。