在使用analyze构建运行应用程序时,Xcode发现我有很多内存泄漏,特别是有一个我不知道如何在这里解决它:
- (UIView *) tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {
UIImageView *sectionImage = [[UIImageView alloc] init];
if (section == 0)sectionImage.image = [UIImage imageNamed:@"myImage.png"];
return sectionImage;
}
所以我的问题是,我如何发布这部分图像?如果是方法的返回?
修改
我有另一个问题,分析给我另一个内存泄漏,我有这个:
.H @property(nonatomic,retain)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中取消分配它?
答案 0 :(得分:1)
你必须使用像这样的自动释放
UIImageView * sectionImage = [[[UIImageView alloc] init] autorelease];
答案 1 :(得分:0)
要回答您的第二个问题,您已发布_directCellPath
,而不是directCellPath
。有区别。
答案 2 :(得分:0)
你必须这样做
@synthesize directCellPath
和这个
- (void)dealloc
{
self.directCellPath = nil;
[directCellPath release];
[super dealloc];
}