在我的应用程序工作流程中的各个点上,我需要显示一个视图。该视图内存密集,因此我希望它在被用户丢弃时被释放。所以,我写了下面的代码:可可内存管理
- (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