2011-08-17 21 views
0

我會改變的導航欄tintColor在viewWillAppear中: self.navigationController.navigationBar.tintColor = tintColor;的導航欄tintColor內存泄露

在viewWillDisappear

NSLog(@"before retain count:%d", [tintColor retainCount]); self.navigationController.navigationBar.tintColor = nil; NSLog(@"after retain count:%d", [tintColor retainCount]);

tintColor = [[UIColor colorWithRed:23.0/255.0 green:169.0/255.0 blue:226.0/255.0 alpha:1.0] retain];

爲什麼NSLog的 「前保持數」 和 「保留計數後」 等於?

回答

0

它可能是一種過度保留。

將一個tintColor分配給UINavigationBar對象的tintColor屬性。 這將調用tintColor屬性的UINavigationBar的setter,tintColor屬性將keep-message發送給要設置的給定tintColor。

我解釋的代碼

tintColor = [[UIColor colorWithRed:23.0/255.0 green:169.0/255.0 blue:226.0/255.0 alpha:1.0] retain]; 

因爲在那裏你創建自定義tintColor之一的最後一行。最後的保留是問題。 你可以做到這一點,但你必須在某個地方釋放它,才能使引用計數的內存清理工作。

請參閱Apple UINavigationBar Class Reference的類別參考以瞭解屬性聲明。

+0

我釋放tintColor dealloc – adamgliea