------- ios培训android培训java培训、期待与您交流! ----------

黑马程序员 内存管理之引用计数器

-----------黑马程序员 IOS培训、Android培训、Java培训、期待与您交流----------------

/*

  1. 在oc中非oc对象的基本数据都存放在内存中的栈中,oc对象存放在内存中的堆中,栈中的数据会随着某个模块的结束会自动释放里面的数据,堆是动态分配的,它不会随着某一模块的结束而释放

  2. 计数器占4个字节,计数器上数字代表的是对象被占用的个数,例如3个人使用这个对象,那么计数器会显示3

  3. retain一次,计数器+1,并返回对象本身

  4. release一次,计数器-1

  5. retaincount是计算计数器里的数字

  */

#import <Foundation/Foundation.h>

@interface Person : NSObject

  {

   Car * _car;

   int _age;

}

@end

@implementation Person

/*

     1.当计数器为0时,对象会被销毁

     2.对象被销毁时,系统会自动调用dealloc方法

  */

  // 我们可以重新dealloc方法,使对象再被销毁时,做一些事情

- (void)dealloc

{

   // 当前对象被销毁时,它所拥有的其他对象在dealloc里要进行一次release

   [_car release];

   [super dealloc];

}

@end

@interface Car : NSObject

@end

@implementation Car

@end

int main()

{

   // 当使用alloc,new或copy时,必须对对象进行一次release一次,不然会造成内存泄露

   Person *p = [[Person alloc] init];

   // 计数器为0,对象被销毁,该对象变成僵尸对象

   [p release];

   // 出现野指针错误:EXC_BAD_ACCESS(code=1,address=....),野指针是指指向僵尸对象(不可用内存)的指针。对象一被销毁时,指向该对象的指针就是野指针

   [p release];

   return 0;

}

posted on 2014-05-08 09:23  wtb  阅读(206)  评论(0编辑  收藏  举报

导航

------- ios培训android培训java培训、期待与您交流! ----------