2011-09-08 39 views
1

我要給你一個簡單的問題......我讀起IOS 4開發的書,有下面的代碼示例:UIAlertView「非阻塞」顯示消息確實保留了視圖?

UIAlertView *alert = [[UIAlertView alloc] 
           initWithTitle:@」Hello」 
            message:@」This is an alert view」 
            delegate:self 
          cancelButtonTitle:@」OK」 
          otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 

然後,它指出,該節目的消息顯示警報視圖但代碼不會停止它的執行,直到用戶關閉對話框,它會繼續並執行下面的代碼...因爲在show消息旁邊有一個釋放消息,show方法是否保留該視圖直到它被解散?否則,我不應該在顯示信息發送後才發佈它。我很抱歉,但是我沒有在參考頁面上找到這些信息,所以我希望這不是一個(太多)愚蠢的問題。

OT:如何激活代碼片段上的顏色?

+1

我相信'[alert show]'會增加保留計數,因爲它是作爲子視圖添加的,但這實際上不應該成爲您的擔憂。你分配的項目,所以你應該釋放它完成後,你在這種情況下顯示語句後 – cpjolicoeur

+0

我只會去這個:'UIAlertView * alert = [[[[UIAlertView alloc] initWithTitle:@「你好「 message:@」This is an alert view「 delegate:self cancelButtonTitle:@」OK「 otherButtonTitles:nil] autorelease];'。然後打電話給show並忘記警報,因爲它將在必要時自動釋放。 – chown

+0

@cpjolicoeur坦克你..我知道我可以忘記誰保留它,只要我正確地釋放它,但它只是瞭解底層機制,因爲我是IOS開發新手,我想了解詳細信息: )順便說一句,我已經讀過有關添加視圖作爲子視圖時保留計數的增加,因此它可能是保留警報視圖的顯示方法。 –

回答

2

顯示警報視圖的窗口保留其引用,因此您不必這樣做。

+0

好吧,所以它被保留時添加爲子視圖,如上所述。謝謝;-) –

+0

@ an0我知道這是遲到,但這是記錄在哪裏?我對此也有把握,但我無法在文檔中找到具體說明的地方。 –

+0

@NicolaMiotto沒有記錄。按慣例:API是以這種方式設計的,所以您不必拘泥於警報視圖,因爲它通常是暫時的。 – an0

0

我想知道這個,並得出結論認爲show方法中的某些內容可能會調用addSubview:遞增UIAlertView上的保留計數,以防止它被解除分配。

+0

我認爲這更可能是保留視圖或任何對象將它添加爲子視圖的show方法..我不認爲委託需要保留警報視圖,因爲它是警報視圖,指向事件發生時的委託,而代表通常不會引用它...我是對的嗎? –

+0

是的,這樣做更有意義。我會修改我的答案 –