OC基礎-記憶體管理小結(手動)
阿新 • • 發佈:2019-01-31
一 計數器的基本操作
1. retain : 計數器+1
2. release : 計數器-1
3. retainCount : 獲得物件當前的計數器值
二 set方法的記憶體管理
1. set方法的實現
- (void)setCar:(Car *)car
{
if(_car != car)
{
[_car release];
_car = [car retain];
}
}
2. dealloc方法的實現(不要直接呼叫dealloc,它是系統呼叫的)
- (void)dealloc
{
[_car release];
[super dealloc];
}
三 @property引數
1. OC物件型別
@property (nonatomic, retain) 類名 *屬性名; //用這個來代替第一點的set方法
@property (nonatomic, retain) Car *car; // 例子
@property (nonatomic, retain) id car; // id不帶*號,因為id本身內部就帶有星號
// 被retain過的屬性,必須在dealloc方法中release屬性
- (void)dealloc
{
[_car release];
[super dealloc];
}
2. 非OC物件型別
@property (nonatomic, assign) 基本型別 屬性名; // (int/float/enum/struct)
@property (nonatomic, assign) int age;
四 autorelease
1. 系統自帶的方法,如果不包含alloc/new/copy,那麼這些方法返回的物件都是已經autorelease過的
[NSString stringWithFormat:引數];
[NSDate date];
2. 開發中經常寫一些類方法快速建立一個autorelease的物件
注意:建立的時候不要直接使用類名,用self
1. retain : 計數器+1
2. release : 計數器-1
3. retainCount : 獲得物件當前的計數器值
二 set方法的記憶體管理
1. set方法的實現
- (void)setCar:(Car *)car
{
if(_car != car)
{
[_car release];
_car = [car retain];
}
}
2. dealloc方法的實現(不要直接呼叫dealloc,它是系統呼叫的)
- (void)dealloc
{
[_car release];
[super dealloc];
}
三 @property引數
1. OC物件型別
@property (nonatomic, retain) 類名 *屬性名; //用這個來代替第一點的set方法
@property (nonatomic, retain) Car *car; // 例子
@property (nonatomic, retain) id car; // id不帶*號,因為id本身內部就帶有星號
// 被retain過的屬性,必須在dealloc方法中release屬性
- (void)dealloc
{
[_car release];
[super dealloc];
}
2. 非OC物件型別
@property (nonatomic, assign) 基本型別 屬性名; // (int/float/enum/struct)
@property (nonatomic, assign) int age;
四 autorelease
1. 系統自帶的方法,如果不包含alloc/new/copy,那麼這些方法返回的物件都是已經autorelease過的
[NSString stringWithFormat:引數];
[NSDate date];
2. 開發中經常寫一些類方法快速建立一個autorelease的物件
注意:建立的時候不要直接使用類名,用self