gpt4 book ai didi

iphone - 如何释放手动保留的类对象

转载 作者:行者123 更新时间:2023-12-03 20:23:06 26 4
gpt4 key购买 nike

我正在开发基于选项卡栏的应用程序我有一个 A 类及其 .xib 和一个 B 类及其 .xib

在 A 类上,我正在加载 B 类的多个实例。

即在A类,我正在做。

在.m文件中

   -(void)renderData:(NSArray *)Data
{
for(int i=0;i<[Data count];i++)
{
B *grid=[[B alloc]initWithNibName:@"Beta" bundle:[NSBundle mainBundle]];
.
.
. //do something with the grid object i.e assign new image etc..)
[self.myGrid addObject:grid]; //i have a NSMutableArray myGrid declared in .h
[grid release];
}
}

现在在 myGrid 数组中我保存了网格的所有对象。

现在我将它们添加到 Aplha 类 View 中。

    for(int i=0;i<[myGrid count];i++)
{
B *grid1=[[myGrid objectAtIndex:i]retain]; //i have done this retain because when i try to come back to this tab or try to call the same function it crashes by saying message send to deallocated instance.
[self.view addSubview:grid1.view];
}

现在我的问题是如何释放我保留的grid1对象。

最佳答案

你的做法是错误的。这里的问题不在于如何释放 grid1 对象,而是您首先保留它们的原因。你很可能不应该这样做;您需要更彻底地调查原始崩溃。

如果您的 grid1 对象存储在 self.myGrid 中,那么它们将由该数组保留。您是否在任何地方发布 myGrid ?只要保留它,您的 grid1 对象就应该保留。

此外,这里还存在一些概念问题。从 Nib 加载 View Controller 并将其 View 添加为另一个 View Controller View 的 subview 通常是不正确的。如果不确切知道您想要实现什么目标,就很难推荐正确的方法。

您不需要将 [NSBundle mainBundle] 传递给 initWithNibName:bundle: - 您只需传递 nil 即可,因为默认行为是使用主包.

您的评论表明您已在 header 中“分配”了一个 NSMutableArray 。您无需在 header 中分配任何内容,只需声明一些内容。您是否真的在实现中的某处初始化了 NSMutableArray

关于iphone - 如何释放手动保留的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225783/

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