—ios面试经之内存管理
1.内存管理
创建对象的三个过程:分配内存空间,存储对象、初始化成员变量、返回对象的指针地址
1.1
对象在完成创建的同时,内部会自动的弹出一个引用计数器(retain count),该计算器是系统用来判断是否回收该对象的唯一依据,当我们的retain count = 0时,系统会毫不犹豫的回收该对象。
1.2
[对象 release] retain count - 1;
[对象 retain] retain count + 1;
1.3
dealloc 函数 ,当一个对象要被销毁时的时候,系统就会自动调用dealloc 函数,通知对象被销毁,在MRC中释放对象时,当重写父类NSObject中的dealloc方法时,要注意一定要重写父类的dealloc方法
- (void) dealloc {
[super dealloc]; //就是这个利用super
NSlog(@"某某对象已经被系统销毁");
}
1.4
内存管理原则(同时也叫配对原则:只要出现了 new alloc retain),就必须出现一个相对应的release或 autorelease
1.5
手动内存管理研究问题的方法(一般就只会出现以下两种问题)
1. 野指针操作 2.内存泄漏
例:在main主函数中
person * p = [person alloc ] init];
p.age = 20;
[p release];
p.age = 30;//这里就会出现野指针操作问题
解决办法:在这之前加上 p = nil ,然后及时p .age = 30;就不会报出不能访问不难访问的内存空间
// 只要对象的retaincount 不等于 0 就会一直存在内存当中
// 内存泄漏指的就是,不在被使用的对象,一直在内存当中没有被销毁
// 野指针操作,当一个对象retaincount已经为0了,调用retain方法,是不会使得对象再次返回内存当中的