2011-08-16 51 views
0

這是否保留我的子視圖兩次?內存明智的子視圖操作

- (void)viewDidLoad 
{ 
CGRect frame=CGRectMake(0, 0, 320, 460); 
mapButtons*newButtons=[[mapButtons alloc] initWithFrame:frame]; 
self.mapButtons=newButtons; 
[newButtons release]; 

[self.view addSubview:self.mapButtons]; 

[self.mapButtons addButtons:@"yo"]; 

一旦它被添加到視圖層次結構與addSubview,它超越的是一個額外的保留計數由伊娃,self.mapButtons保留?

我想能夠很容易地操縱這個子視圖,因此伊娃;這是一個好方法,還是有更好的方法?

回答

0

編輯 你提到memory-wise所以我認爲它可能需要一些清理。每個對象都有一個保留計數,該計數與retain一起遞增,並用release遞減。當保留計數達到0時,將發送一個dealloc消息。所以當你在一個對象上增加一個保留時,你不再使用內存,你只需遞增計數器而不做任何重複。

有幾種方法可以獲取對視圖的引用,但您採用的方式是一種好方法。另一種方法是標記視圖並從self.view使用

UIView *view = [self.view viewWithTag:tagId]; 

我更喜歡伊娃爾的方式,例如,你如何做到這一點(當ARC進入時這將會改變),但我傾向於不擔心對象的實際保留數。我專注於平衡我的保留/釋放。

所以我用的是規則,如果它是一個局部變量,我嘗試儘可能符合我的保留/釋放的它是在限定的範圍內,唯一的例外是伊娃其在dealloc

+0

感謝釋放出來,當另一位更有經驗的開發人員認爲我正確地做某件事情時,他總是重新保證。當然,現在我已經學到了很多這種內存管理的東西,在iOS 5中引入ARC讓我想知道,「嗯」? – johnbakers