首页 > 代码库 > 内存管理

内存管理

/* 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> dealloc  * 当一个对象要被回收的时候,就会调用  * 一定要调用[super dealloc],这句调用要放在最后面  2.概念 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS) 3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错  */
// 当一个Person对象被回收的时候,就会自动调用这个方法- (void)dealloc{    NSLog(@"Person对象被回收");        // super的dealloc一定要调用,而且放在最后面    [super dealloc];}
  // -[Person setAge:]: message sent to deallocated instance 0x100109a10   // 给已经释放的对象发送了一条-setAge:消息:   p.age = 10;
/* 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作) 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)  3.谁retain,谁release  4.谁alloc,谁release */
/* 内存管理代码规范: 1.只要调用了alloc,必须有release(autorelease)   对象不是通过alloc产生的,就不需要release  2.set方法的代码规范 1> 基本数据类型:直接复制 - (void)setAge:(int)age {     _age = age; }  2> OC对象类型 - (void)setCar:(Car *)car {    // 1.先判断是不是新传进来对象    if ( car != _car )    {        // 2.对旧对象做一次release        [_car release];         // 3.对新对象做一次retain        _car = [car retain];    } }  3.dealloc方法的代码规范 1> 一定要[super dealloc],而且放到最后面 2> 对self(当前)所拥有的其他对象做一次release - (void)dealloc {    [_car release];    [super dealloc]; } */
/*     _speed :直接访问成员变量     self->_speed :直接访问成员变量     self.speed : get方法     [self speed] : get方法     */
    Student *stu = [[Student alloc] init];        // 这行内存有内存泄露    stu.car = [[Car alloc] init];        [stu release];    // 这行内存有内存泄露    [[Car alloc] init].speed = 100;
// retain : 生成的set方法里面,release旧值,retain新值@property (retain) Book *book;@property (retain) NSString *name;

 

内存管理