0

在使用分析构建运行应用程序时,Xcode 发现我有很多内存泄漏,特别是有一个我不知道如何解决它:

- (UIView *) tableView:(UITableView *)tableView 
viewForHeaderInSection:(NSInteger)section {



UIImageView *sectionImage = [[UIImageView alloc] init];
if (section == 0)sectionImage.image = [UIImage imageNamed:@"myImage.png"];


return sectionImage;
}

所以我的问题是,我怎样才能发布这个sectionImage?if 是方法的返回?

编辑:

我有另一个问题,分析给我另一个内存泄漏,我有这个:

.h @property (nonatomic, 保留) NSIndexPath *directCellPath;

.m

@synthesize directCellPath = _directCellPath;

- (id)init{
if ((self = [super initWithNibName:@"MyViewController" bundle:nil])) {


    self.directCellPath = [[NSIndexPath alloc] init];

}
return self;
}

然后在代码中我使用它,最后在 dealloc 中我这样做:

- (void)dealloc {

[_directCellPath release];

[super dealloc];
}

并在这条线上给我一个内存泄漏:

self.directCellPath = [[NSIndexPath alloc] init];

为什么如果我在 dealloc 中释放了它?

4

3 回答 3

1

你必须使用这样的自动释放

UIImageView *sectionImage = [[[UIImageView alloc] init] autorelease];

于 2012-06-02T22:17:42.300 回答
0

为了回答您的第二个问题,您发布了_directCellPath,而不是directCellPath。它们是有区别的。

于 2012-06-02T22:36:24.763 回答
0

你必须这样做

@synthesize directCellPath 

和这个

 - (void)dealloc 
{

self.directCellPath = nil;

[directCellPath release];
[super dealloc];

}
于 2012-06-02T22:50:05.467 回答