(或者甚至只有一个有一个代表的班级)
假设我有一个名为DataGetter的类,它从Web下载文件。它有一个委托方法,在下载文件时会触发:
- (void) dataGetterFinished:(DataGetter *)dataGetter;
所以在我的代码中我可以设置几个文件来下载,如下所示:
// in AViewController.m
DataGetter *blueFile = [[DataGetter alloc] init];
blueFile.delegate = self;
[blueFile getData:@"http://example.com/blue-file"];
DataGetter *redFile = [[DataGetter alloc] init];
redFile.delegate = self;
[redFile getData:@"http://example.com/red-file"];
使用clang静态分析器,上面的每个分配行都会得到“在线分配的对象的潜在泄漏...”错误。那么我将如何释放该对象。它必须流连,因为它有一个代表。因此可以将它作为dataGetterFinished方法的最后一行发布,就像这样
- (void) dataGetterFinished:(DataGetter *)dataGetter
{
// code
[dateGetter release];
}
......或者我应该以某种方式使用自动释放?
答案 0 :(得分:1)
从技术上讲,这样可以正常工作,但我建议在NSMutableArray中跟踪不同的DataGetters。
例如:
DataGetter *blueFile = [[DataGetter alloc] init];
blueFile.delegate = self;
[blueFile getData:@"http://example.com/blue-file"];
[dataGetters addObject:blueFile]; // dataGetters is an NSMutableArray declared in the .h
[blueFile release];
// Same for red
然后在委托方法中,简单地从数组中删除getter:
- (void) dataGetterFinished:(DataGetter *)dataGetter
{
// code
[dataGetters removeObject:dataGetter];
}
数组负责保留对象,但是没有得到分析警告。
请务必在dealloc方法中发布dataGetters。