gpt4 book ai didi

iphone - cocoa 内存管理

转载 作者:行者123 更新时间:2023-12-03 16:53:18 25 4
gpt4 key购买 nike

在应用程序工作流程的各个阶段,我需要显示一个 View 。该 View 非常占用内存,因此我希望当用户丢弃它时将其释放。因此,我编写了以下代码:

- (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.
}

不幸的是,此方法仅在第一次有效。将 View 显示在屏幕上的后续请求会导致“消息发送到已释放的实例” 错误。显然,释放的实例与 nil 不同。我考虑过在 [myView release] 之后添加一行,内容为 myView = nil。但是,这可能会导致错误(该行之后对 myView 的任何调用都可能会产生错误)。

那么,我该如何解决这个问题呢?

最佳答案

myView 设置为 nil 是正确的做法。 这样做会产生错误,因为它无法检测到地引用了已释放的对象。您的代码测试 nil 以查看是否需要创建新 View ,因此您应该适本地设置该变量。

关于iphone - cocoa 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com