2012-07-20 177 views
2

有些情況下,您想使用自己的動畫呈現警報樣式視圖控制器(而不是使用presentModalViewController:animated:UIAlertView)。[自動釋放]是否可以接受?

釋放此視圖控制器的正確方法是在視圖消失時調用的回調函數中,但設置委託和所有似乎過度使用的方法。

所以我這樣做:

- (void)dismiss 
{ 
    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
     self.view.alpha = 0; 
    } completion:^(BOOL finished) { 
     [self.view removeFromSuperview]; 
     [self autorelease]; 
    }]; 
} 

和呈現對象將不能釋放或自動釋放視圖控制器。內存管理明智我沒有看到這個問題。這是不好的做法嗎?

+0

你可以'autorelease'的'self'但'removeFromSuperview'就足以讓'superview'釋放'self'對象。 – holex 2012-07-20 10:04:34

+0

你確定嗎?我認爲'removeFromSuperview:'會釋放視圖,但不是視圖控制器。 – Morrowless 2012-07-20 10:09:52

+0

是的,你是對的,它只釋放'view'。內存管理的一些信息:你不應該釋放或釋放任何不是由你創建或保留的對象,它會導致內存泄漏。你必須「釋放」或「自動釋放」你'init','copy','retain'或'new'的對象,否則會導致內存泄漏。簡單。 :) – holex 2012-07-20 10:17:34

回答

0

我會考慮這個不好的做法。

只有在此對象上調用retain的對象應在其上調用releaseautorelease

我假設你已經不叫[self retain]


我什至不知道,你期望它這會工作。你能保證self需要在這一點上釋放,爲什麼不能保留它的對象本身稱爲release?您是否試圖強制selfdealloc

如果self在這點上釋放,這是期待self任何其他對象仍然活着是傳遞消息到零,或者更糟的是,內存可能會被重新分配和這些對象將消息發送到任意對象。

+0

「如果通過引用訪問實例變量,則自我保留」。從這裏開始:http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxVariables.html – trojanfoe 2012-07-20 10:00:19

+0

我不需要以這種方式釋放自己,它只是更方便,因爲我不會不需要這樣設置委託/回調。視圖控制器自行處理。 – Morrowless 2012-07-20 10:07:14

0

這似乎是不好的做法,但沒有看到任何影響內存。在模式的看法而言,爲什麼你不只是彈出回來,如果這就是你想達到使用的是什麼:(但我沒有看到這一點)

[self.navigationController popViewControllerAnimated:YES]; 
+1

我沒有使用導航控制器。 – Morrowless 2012-07-20 10:07:57