2010-09-13 30 views
4

我一直在研究如何使用UIAlertView顯示一個模態視圖幾個小時,並且我明白顯示它不會「阻止」代碼(模態窗口顯示並且程序保持運行 - 我們必須使用委託來捕捉在此模式窗口上選擇的操作)。然後我研究了幾個例子,並注意到每個例子總是在顯示它之後釋放模態窗口。由於代碼不會停止,視圖將立即發佈,因此,它如何正常工作?爲什麼釋放UIAlertView只是顯示它而不是阻塞方法?

這裏的例子(有關於谷歌許多其他的):

[[UIAlertView alloc] initWithTitle:@"Title" message:@"Message..." delegate:NULL cancelButtonTitle:@"OK" otherButtonTitles:NULL]; 
    [alert showModal]; 
    [alert release]; 

感謝您的幫助, 蘋果92

回答

5

alloc方法將返回你有一個保留計數一個實例1. showModal方法可能是retains警報視圖,所以它仍然保留在屏幕上(並保留),直到點擊一個按鈕。這對我來說很有意義,因爲你將它呈現爲模態窗口,所以它沒有一個「父」,負責釋放它。

+0

是的!如果我們假設showModal保留,那麼保留計數器將增加1,然後賦值2.然後釋放會減少1到1.然後在釋放後,我們仍然有一個計數器值爲1,那麼窗口將不會被釋放... – user255607 2010-09-13 21:55:46

+0

但是當警報解除時它會再次發佈。顯示時警報的保留計數爲1是可以的。 – pgb 2010-09-13 23:37:57

8

我不知道你從哪裏獲得-showModal(通常的方法只是-show),但該行爲會將警報添加到視圖層次結構中。當一個視圖被添加爲另一個視圖的子視圖時(我相信在這種情況下它是一個正在添加的系統級視圖),它會自動保留,所以您不必這樣做。

+0

是的,那就是-show,而不是-showModal。 – user255607 2010-09-13 22:22:08