我讀通過大書呆子牧場書上的iOS編程和我有一個關於他們在第7章iOS的基本內存管理
建立在某一點上Hypnotime程序問題,他們實現了以下方法:
- (void)showCurrentTime:(id)sender
{
NSDate *now = [NSDate date];
static NSDateFormatter *formatter = nil;
if (!formatter) {
formatter = [[NSDateFormatter alloc] init];
[formatter setTimeStyle:NSDateFormatterShortStyle];
}
[timeLabel setText:[formatter stringFromDate:now]];
}
我的問題是關於NSDateFormatter *formatter
。格式化程序使用alloc
和init
創建。我總是得知,alloc
需要在某個地方發佈,對吧?當formatter
得到timeLabel
,不是timeLabel
發送retain
它?並且不能(不應該?)我隨後發佈formatter
?
我瀏覽了接下來幾頁的代碼,除了release
發送到dealloc
的timeLabel
外,我無法在任何地方找到任何發佈消息。
我在這裏混合的東西? formatter
是不是應該由我發佈的理由嗎?我想成爲一名優秀的記憶公民。任何幫助表示讚賞:)
感謝您的建議。如果它在應用程序的整個生命週期中保持活躍狀態,這是否意味着我應該在dealloc中釋放它,或者根本不釋放它?說實話,這有點困惑。 – cabaret
不,它不會被釋放,它不會創建內存泄漏,除非再次指定格式化程序並將其先釋放。這就是爲什麼有一個如果檢查。 – Joe
好吧,我想我明白了。非常感謝。 – cabaret