如何解决内存泄漏问题?

3
+ (UITableViewCell *)inputCell {
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"id"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;  
    cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
    return cell;
}

Xcode显示了一个内存泄漏。我尝试在单元格初始化和返回期间使用自动释放,但应用程序在两种情况下都崩溃了。


你必须在那里使用自动释放。能否发布您正在使用“inputCell”方法的代码?我猜崩溃发生在代码的另一个部分。 - Jorge
2个回答

1
您发布的代码将会造成内存泄漏,因为您的alloc init会返回一个保留计数为1的单元格对象。调用该代码的对象很可能会将此对象返回给cellForRowAtIndexPath方法,该方法会将其附加到UITableView并再次增加保留计数(到2)。因此,当UITableView释放其内存时,该对象仍将具有一个保留计数为1。
如果您在此代码中尝试自动释放该对象,而程序崩溃,则说明您有其他错误。

我已经在名为Utility的类中编写了inputCell方法。我正在另一个类中调用inputCell,如下所示: fNameCell = [Utility inputCell]; - user737645
1
@Kiran 这种方式分配单元格没有问题(你确实需要自动释放)。因此,请检查在 inputCell 调用之后对该对象的操作。你是否在其他地方释放了它? - RedBlueThing
不,我不会在任何地方发布它。 - user737645
@Kiran 如果是这样,那么你的崩溃可能是在其他不相关的代码中发生的。你能否提供一些关于崩溃的额外信息? - RedBlueThing
应用程序在主函数中出现 SIG_ABBRT 崩溃。 - user737645
1
@Kiran,所以你没有一个有用的调用堆栈?听起来像是在某个早期阶段发生了内存损坏。可能是在未初始化指针上调用释放函数,或者类似的情况。如果没有查看所有代码,很难确定。 - RedBlueThing

0
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"id"] autorelease];

除非您在调用-inputCell的代码中遇到问题,否则应该没有问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接