2011-08-24 137 views
2

通常我做這樣的事情(見下文)中獲取價值,我需要:我必須保留/釋放從NSDictionary中取得的值嗎?

NSDictionary *state = [notification.userInfo objectForKey:@"state"]; 
[self.tabBarItem setBadgeValue:[state objectForKey:@"short"]]; 

但不值得做保留從NSDictionary中取值/釋放?類似這樣的:

NSDictionary *state = [[notification.userInfo objectForKey:@"state"] retain]; 
[self.tabBarItem setBadgeValue:[state objectForKey:@"short"]]; 
[state release]; 

是否更加記憶友好?或者我不應該打擾,只是相信自動釋放池來完成它的工作?

回答

3

不,這樣做沒有意義。 [notification.userInfo objectForKey:@"state"]的結果始終是一個自動釋放對象;如果添加額外的retainrelease,那不會改變任何內容。

+0

那麼它不會加速釋放'state'?爲什麼我想到這個 - 我看到一些文章告訴我們避免使用'autorelease'變量。如果可能的話,手動釋放它們。這就是爲什麼我想到它...... – NilColor

+1

@NilColor是的,有時避免autoreleased變量可以提供速度增加(雖然通常不是很多)。但我的觀點是,在這種情況下你無法避免它,'-objectForKey:'將始終返回一個自動釋放對象。所以只是不要擔心:) – jtbandes

相關問題