释放返回方法对象的对象c

时间:2012-06-02 22:15:46

标签: iphone ios memory-leaks

在使用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中取消分配它?

3 个答案:

答案 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];

}