2011-04-16 82 views
0

我創建了一個自定義UIView,我在整個程序中都使用了這個自定義CustomMessageCustomMessage的外觀是動畫效果,所以我在CustomMessage類中寫了一個方法,名爲showInView:以顯示視圖。例如,說我希望顯示在特定視圖控制器CustomMessage觀點 - 我會用下面的代碼:showInView:自定義UIView的方法

CustomMessage *myCustomMessage = [[CustomMessage alloc] initWithMessage:@"Hello"]; 

[myCustomMessage showInView:self.view]; 

正如你所看到的,這是非常相似,如何創建並提出了UIActionSheet

但是,我遇到了內存管理問題。如果我把下面的代碼行中的兩行以上直接以下:

[myCustomMessage release]; 

然後(如預期)的程序將與message sent to deallocated instance錯誤崩潰。

我不確定我需要在我的CustomMessage類中做什麼,這樣我可以在調用showInView:方法後直接釋放對象,以便不會發生內存泄漏。顯然這是可以做到的,因爲這就是UIActionSheet的工作原理(但我無法理解我如何實現類似的東西 - 我無法弄清楚一些其他對象如何保留對象,大概是self.view(在上面的示例中)顯示CustomMessage,以避免它在仍處於使用狀態時完全釋放對象)。

其他的一切完美的作品,除了這個小的方面,所以任何幫助,將不勝感激:)

回答

2

我需要看到你的代碼showInView:CustomMessage.m。我期望它看起來像下面這樣。

- (void)showInView:(UIView *)view 
{ 
    // pre-animation configuration 
    [view addSubview:self]; 
    // do the animation 
} 

這意味着CustomMessage實例由view保留。此外,如果您的showInView的實現完全使用併發,則可能會立即返回,允許發佈MyCustomMessage,然後後臺操作嘗試訪問發佈對象。我只是猜測沒有看到你的代碼。

什麼是崩潰日誌?什麼信息發送到什麼對象在什麼情況下?此信息將本地化問題。

如果以上都不能幫助您解決問題,請發佈代碼showInView以及崩潰日誌中的詳細信息,然後再看看。

+0

此方法是一種很好的MVC模式設計嗎?該觀點正在控制自己,這將違反MVC模式。我錯了嗎?只是想明白。謝謝 – 2016-05-25 11:25:26