在我的應用程序工作流程中的各個點上,我需要顯示一個視圖。該視圖內存密集,因此我希望它在被用戶丟棄時被釋放。所以,我寫了下面的代碼:可可內存管理
- (MyView *)myView {
if (myView != nil)
return myView;
myView = [[UIView alloc] initWithFrame:CGRectZero]; // allocate memory if necessary.
// further init here
return myView;
}
- (void)discardView {
[myView discard]; // the discard methods puts the view offscreen.
[myView release]; // free memory!
}
- (void)showView {
view = [self myView];
// more code that puts the view onscreen.
}
不幸的是,這種方法只能在第一次使用。後續請求將屏幕放在屏幕上導致"message sent to deallocated instance"
錯誤。顯然,釋放的實例與nil不同。我想在[myView release]
之後放置一條額外的行,該行的內容爲myView = nil
。但是,這可能會導致錯誤(在該行之後調用myView
可能會產生錯誤)。
那麼,我該如何解決這個問題呢?
如果您在發佈myView後正在調用myView,那麼*要*會產生錯誤。 – walkytalky 2010-06-17 17:35:52