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

Aje*_*rya 2 iphone memory-management objective-c ios4

我正在开发一个基于Tab Bar的应用程序,我有一个带有.xib的A类和带有.xib的B类

在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];  
            }
    }
Run Code Online (Sandbox Code Playgroud)

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

现在我将它们添加到Aplha类视图中.

    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];
       }
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ath 6

你正在接近这个错误.这里的问题不是如何释放grid1对象,这就是为什么你要保留它们的原因.你很可能不应该; 你需要更彻底地调查原始崩溃.

如果您的grid1对象存储在self.myGrid那里,那么它们将被该数组保留.你myGrid在哪里发布?只要保留,您的grid1对象应该是.

此外,这里有一些概念性问题.从笔尖加载视图控制器并将其视图添加为另一个视图控制器视图的子视图通常是不正确的.如果不确切知道你想要达到的目的,很难推荐正确的方法.

你并不需要在传递[NSBundle mainBundle]initWithNibName:bundle:-你可以简单地传递零作为默认行为是使用主束.

您的评论说您已NSMutableArray在标题中"分配"了一个.您没有在标题中指定任何内容,只需声明内容即可.你真的NSMutableArray在实现中的某处初始化了吗?