gpt4 book ai didi

objective-c - 关于ios的内存管理

转载 作者:行者123 更新时间:2023-11-29 04:50:29 25 4
gpt4 key购买 nike

这里我的 viewController 中有一个 tableView,它是这样的:

//.h
...
UITableView *aTable;
...
@property (nonatomic, retain) UITableView *aTable;
//.m
@synthesize aTable;
...
self.aTable = nil; // in viewDidUnload
[aTable release]; // in dealloc
...

现在,在 viewDidLoad 方法中我必须初始化这个表,所以我这样做了

// viewDidLoad
...
self.aTable = [[UITableView alloc] initWithFrame:xxxxx];
...

但是当我分析这个时,它提醒我在viewDidLoad中,

这个“aTable”可能存在潜在的内存泄漏,

但是我猜我即将在dealloc中释放它,那么为什么仍然存在内存泄漏?

与“保留”属性有关?

我是否必须在分配和启动此 tableView 的代码中添加自动释放?

非常感谢!

最佳答案

是的,应该是(在非弧环境中):

self.aTable = [[[UITableView alloc] initWithFrame:xxxxx] autorelease];

这会给你一个自动释放的对象(保留计数:0)

[[[UITableView alloc] initWithFrame:xxxxx] autorelease];

这会保留表(保留计数:1)以便保留到 viewDidUnload 或直到 Dealloc

self.aTable = ...

如果您不自动释放表,您将获得保留计数:2(alloc-init 之一和保留属性中的另一个),然后在 ViewDidUnload 上使用此行 self.aTable = nil; 您将保留计数减少到 1,但随后将 nil 分配给您的 ivar,因此您将丢失对事件表的引用,从而泄漏 tableView,然后在 dealloc 中您将进行基本上这个 [nil release] 没有任何效果。

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

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