【问题标题】:How to release an locally created object, while it using as return object如何释放本地创建的对象,同时它用作返回对象
【发布时间】:2011-09-08 15:53:10
【问题描述】:

在我的 pgm 中,我在该段中收到了泄漏警告。

-(NSMutableArray *)filterArrayForBank:(NSMutableArray *)originalArray withKey:(NSString *)key{ NSMutableArray *mutableArray=[[NSMutableArray alloc]init];

for (int i=0; i<[originalArray count]>0; i++) {
    if([[[originalArray objectAtIndex:i]objectForKey:@"transType"] isEqualToString:key]){
        [mutableArray addObject:[originalArray objectAtIndex:i]];
    }
}
//////NSLog(@"mutableArray %@",mutableArray);
       return mutableArray ;

}

如果我通过以下行阻止此泄漏,应用程序会崩溃

要么 返回 [mutableArray 自动释放];

NSMutableArray *mutableArray=[[[NSMutableArray alloc]init]autorelease];

请帮助我阻止这种泄漏。 提前致谢。

【问题讨论】:

  • 分配此NSMutableArray *mutableArray=[[[NSMutableArray alloc]init]autorelease];时是否存在内存泄漏?
  • @sherilyn,它没有显示任何泄漏,但应用程序崩溃了。

标签: objective-c ios memory-management memory-leaks


【解决方案1】:

如果您返回一个自动释放的数组,您需要确保将其保留在调用方方法中。但是,如果您没有将其保留在调用方方法中,请尝试将方法重命名为:

-(NSMutableArray *)newFilterArrayForBank:(NSMutableArray *)originalArray withKey:(NSString *)key

这将通知编译器您正在分配一个新的 NSMutableArray。

【讨论】:

  • 你能解释一下,改变方法会解决问题吗?我没有保留在调用者方法中。
  • @Ram 如果你想返回一个拥有的对象,你的方法名应该以 new 开头。这将消除警告,也是一种很好的做法,因为从方法名称中可以明显看出创建了一个新对象。
  • 谢谢伙计,我已经进行了更改并将其保留在调用方方法中。现在泄漏已停止并且没有崩溃。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多