引用計數器的基本操作

 1.方法的基本使用
 1> retain :計數器+1,會返回對象本身
 2> release :計數器-1,沒有返回值
 3> retainCount :獲取當前的計數器
 4> dealloc
  * 當一個對象要被回收的時候,就會調用
  * 一定要調用[super dealloc],這句調用要放在最後面
 
 2.概念
 1> 殭屍對象 :所佔用內存已經被回收的對象,殭屍對象不能再使用
 2> 野指針 :指向殭屍對象(不可用內存)的指針,給野指針發送消息會報錯(EXC_BAD_ACCESS)
 3> 空指針 :沒有指向任何東西的指針(存儲的東西是nil、NULL、0),給空指針發送消息不會報錯

person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property int age;

@end

person.m

#import "Person.h"

@implementation Person


// 當一個Person對象被回收的時候,就會自動調用這個方法
- (void)dealloc
{
    NSLog(@"Person對象被回收");
    
    // super的dealloc一定要調用,而且放在最後面
    [super dealloc];
}

@end

main函數
#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;
}

發佈了59 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章