【问题标题】:When to release dynamically created objects何时释放动态创建的对象
【发布时间】:2023-03-08 01:47:02
【问题描述】:

在我的 iPad 应用中,

我有一个继承自 UIButton 的自定义类。

我正在使用 for 循环在主视图上动态添加按钮。

这个按钮也有标签。

我的问题是何时释放自定义类的对象。

for(NSMutableDictionary *dict  in Categories)
{

Category *category=[[Category alloc] initWithName:[dict valueForKey:@"category_name"]  identity:[[dict valueForKey:@"category_id"] intValue] imageName:nil];

category.lblimagesCount=[[UILabel alloc] initWithFrame:CGRectMake(category.frame.size.width-31,   category.frame.origin.y-42, 26, 26)];

[category addSubview:category.lblimagesCount];

[self.viewHeader addSubview:category];

[category release];
category=nil;

}

如何避免内存泄漏。 特别是对于 1. 标签 2.分类类。

在哪里写发布?

我。类别类(UIButton) 有其 dealloc 方法,但它从未被调用。

二。由于我添加到子视图后立即释放它,它会影响我的按钮点击。

三。我应该什么时候释放标签。

对内存管理非常困惑。

【问题讨论】:

    标签: iphone objective-c xcode ipad memory-management


    【解决方案1】:

    我会回答你的问题:

    我。类别类(UIButton) 有其 dealloc 方法,但它从未被调用。 因为它没有完全发布,请参阅问题 ii。

    二。由于我在添加到子视图后立即释放它,它会影响我的按钮点击。 不,因为你的子视图现在是按钮的所有者,当你将它添加到子视图时,你和子视图都是所有者,当你释放时,按钮现在归子视图所有。

    三。我应该什么时候释放标签。 出于与问题 ii 相同的原因,将 then 添加到子视图后。

    如果你不明白,我很乐意澄清。

    【讨论】:

    • @Antoonio 标签将如何与类别类关联?
    • 因为 Antonio 如果我在将标签添加到子视图后释放标签会发生什么,我无法在代码中进一步修改它。因为标签没有反映变化。
    • 正如我之前在添加子视图时所读到的,您的视图归子视图所有,而不是对象的全部属性?
    • 在这种情况下,您应该保留以后需要的对象的副本,然后在主控制器的dealloc 方法中释放它们。
    • 如果对象的保留计数为零并且如果我释放它,那么它会是一个 EXC Bad ACCESS 消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多