2011-07-10 90 views
0

我有一個非常簡單的問題。在下面的一段代碼中,將活動指示符放入dealloc會更好嗎,因爲我將它添加到子視圖後開始並停止活動指示符?我應該在dealloc中放置我的活動指示符釋放語句嗎?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // add activity indicator 
    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    activityIndicator.center = CGPointMake(self.view.bounds.size.width/2.0f, self.view.bounds.size.height/2.0f); 

    activityIndicator.hidesWhenStopped = YES; 
    [self.view addSubview:activityIndicator]; 
    [activityIndicator release];  // SHOULD THIS BE PLACED IN DEALLOC? 

    [self loadFax]; 
} 

回答

2

實際上,除了dealloc之外,我會將release放在viewDidUnload中。

不這樣做可能會導致內存泄漏,以防您的應用收到內存警告並釋放所有視圖;事實上,在這種情況下,視圖將在需要時再次加載,這將導致爲您分配第二個活動指標,而不會釋放先前的實例。

請注意,根據下面的註釋,在viewDidUnload中釋放並不意味着您可能會在dealloc中跳過釋放。這有兩個原因:如果您運行的是iOS 2.x,則不存在viewDidUnload;此外,當你的視圖控制器正常釋放時,viewDidUnload將不會被調用。所以這個建議在兩個地方都有效,不要忘記在做完之後將伊娃的價值設置爲零。

在這種情況下,最好將您的操作釋放,但至少將ivar值設置爲零,否則您會認爲您仍然擁有該對象。

如果您使用的保留財產,犯了這樣的任務:

Self.activityIndicator = .... 

這不會是這樣,我仍然認爲在viewDidUnload釋放你在viewDidLoad中創造了什麼是一般更好的做法。

Here什麼關於viewDidUnload的文檔。

+2

viewDidUnload僅在內存警告的情況下被調用,而不是從被釋放的VC中調用......它需要在兩者中完成。 –

+0

@Kendall Helmstetter Gelner:非常感謝!我忘了這個和iOS2,並糾正了我的答案。 – sergio

1

是的,如果你打算使用整個在隨機時間來看activityIndi​​cator,dealloc將是一個好地方。

1

我會在使用時釋放它,每次需要時都會創建一個新的。這樣你就沒有分配的內存空間。讓自己成爲指標的代表,並在完成時釋放它。

相關問題