gpt4 book ai didi

iphone - UIView 子类的 Dealloc 方法没有被调用

转载 作者:行者123 更新时间:2023-11-29 05:05:31 26 4
gpt4 key购买 nike

我有一个名为 SettingsViewController 的 View Controller 和一个名为 ViewAccounts 的自定义 UIView 子类。在 SettingsViewController 中,我使用下面的代码将 ViewAccounts View 添加到 SettingsViewController 中。

 if(!self.viewAccounts)
{
ViewAccounts *objViewAccounts= [[ViewAccounts alloc] initWithFrame:CGRectMake(0, yViews, 320, 400) withViewController:self];
[self.view insertSubview:objViewAccounts atIndex:0];
self.viewAccounts = objViewAccounts;
[objViewAccounts release];
}

问题是 ViewAccounts(UIView 的子类)的 dealloc 方法没有被调用。如果我注释这两行代码,则会调用 dealloc 方法。

[self.view insertSubview:objViewAccounts atIndex:0];
self.viewAccounts = objViewAccounts;

我猜问题出在保留计数上,当我们使用 insertSubview 或 addSubiew 时,它会增加 1,但如何摆脱它。这是正确的使用方法吗?

最佳答案

请注意:分配 viewAccount 可能会导致僵尸出现(在原始代码片段中),因为您在最后一行释放了它。

我建议采用以下方法:

  1. 再次保留 viewAccounts
  2. 不要使用 autorelease,因为您没有从该方法返回它
  3. 注意代码片段中方法的dealloc方法

这就是我编写带有 viewAccounts 保留的代码片段的方式

if(!self.viewAccounts)
{
ViewAccounts *objViewAccounts= [[ViewAccounts alloc] initWithFrame:CGRectMake(0, yViews, 320, 400) withViewController:self];
[self.view addSubview:objViewAccounts];
self.viewAccounts = objViewAccounts;
[objViewAccounts release];
}
...
- (void) dealloc {
[super dealloc];
[viewAccounts release];
...
}

原始代码中发生的情况是,保留变量viewAccounts在此类生命周期结束时未正确释放,因此未调用dealloc。

顺便说一句,当您仅分配变量时,如果您重新分配该变量,特别是如果您将其设为NIL,则必须自己管理保留。假设您将变量设置为 NIL,则可以再次执行该代码片段。但是,当您覆盖该变量时,您将无法释放第一个值。如果您使用retain,Object-C 将为您执行此操作。根据经验,我总是会使用 retain 属性,直到您有足够的经验来处理其他情况。

关于iphone - UIView 子类的 Dealloc 方法没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438734/

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