簡體   English   中英

解除ModalViewController時執行EXEC_BAD_ACCESS

[英]EXEC_BAD_ACCESS when Dismissing ModalViewController

我正在使用一個非常標准的配方在我的iPhone應用程序中展示ModalViewControllers,但是我遇到了一種情況,即配方被破壞了,我很困惑。 這是我(幾乎總是)設置演示文稿的方式:

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil];
[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[controller setDelegate:self];
[self presentModalViewController:controller animated:YES];
[controller release];

直到我將一件事添加到混合中,並且在呈現它之前,我已經向新的控制器對象發送了一條消息,這一直很好,就像這樣:

MatcherViewController *controller = [[MatcherViewController alloc] initWithNibName:@"MatcherView" bundle:nil];

[controller setPrimary:primaryIndex andSecondary:secondaryIndex];

[controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[controller setDelegate:self];
[self presentModalViewController:controller animated:YES];
[controller release];

在我關閉視圖控制器之前,添加此方法調用似乎是可行的...此時,應用程序因EXEC_BAD_ACCESS信號而崩潰。 如果刪除[controller release] ,我可以使它與額外的行一起使用,但是恐怕會導致泄漏。 有什么想法為什么要在演示之前向對象發送消息會導致這種情況? 有沒有更好的方法將簡單參數傳遞給ModalViewController?

感謝您抽出寶貴時間整理新手; p

在控制器的dealloc方法中,確保您沒有釋放過多的內容。

我會猜測primaryIndexsecondaryIndex 不正確保留的對象 ,因此它們依賴於保留它們才能生存的模式視圖。 當您釋放模式視圖時,它們會死掉,但隨后在代碼中的其他地方調用會導致崩潰。

如果它們是該類的保留屬性,請始終使用“ self.propertyName”構造訪問它們,以確保正確管理其保留計數。

以我的經驗,過分釋放形式的過早優化是當今Objective-C頭痛的主要原因。 老派的Objective-C編碼人員對泄漏感到疑慮,因為他們幾乎不可能在一天之內手動找到泄漏。 這就是為什么很多資源仍然非常重視防止泄漏的原因。 但是,使用現代分析工具,通常很難發現泄漏。

在最初的開發過程中,如有疑問,請不要發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM