内存管理

 

 1.方法的基本使用

 1> retain :计数器+1,会返回对象本身

 2> release :计数器-1,没有返回值

 3> retainCount :获取当前的计数器

 4> dealloc

  * 当一个对象要被回收的时候,就会调用

  * 一定要调用[super dealloc],这句调用要放在最后面

 

 2.概念

 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象不能再使用

 2> 野指针 :指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)

 3> 空指针 :没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错

 

 */

 

#import <Foundation/Foundation.h>

#import "Person.h"

 

int main()

{

    // 1

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

    

    //NSUInteger c = [p retainCount];

    

    //NSLog(@"计数器:%ld", c);

    

    

    // 2 retain方法返回的是对象本身

    [p retain];

    

    // 1

    [p release];

    

    // 0 野指针:指向僵尸对象(不可用内存)的指针

    [p release];

    

    [p retain];

    

    // -[Person setAge:]: message sent to deallocated instance 0x100109a10

    // 给已经释放的对象发送了一条-setAge:消息:

    p.age = 10;

    //[p setAge:10];

    

    // 指针p变成空指针

    //p = nil;

    

    // EXC_BAD_ACCESS : 访问了一块坏的内存(已经被回收、已经不可用的内存

    // 野指针错误

    // OC不存在空指针错误,给空指针发送消息,不报错

    [p release];

    [p release];

    [p release];

    [p release];

    

    [nil release];

    

    return 0;

}

 

#import <Foundation/Foundation.h>

 

@interface Person : NSObject

 

@property int age;

 

@end

 

#import "Person.h"

 

@implementation Person

 

 

// 当一个Person对象被回收的时候,就会自动调用这个方法

- (void)dealloc

{

    NSLog(@"Person对象被回收");

    

    // super的dealloc一定要调用,而且放在最后面

    [super dealloc];

}

 

@end

 

posted @ 2016-03-28 11:28  lance.xiang  阅读(60)  评论(0)    收藏  举报