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;
}