2010-11-28 54 views
1

(或者甚至只有一个类和一个代表)如何发布具有相同代表的几个类?

说我有一个名为DataGetter的类,它从Web下载文件。它有一个委托方法,后者当文件被下载触发:

- (void) dataGetterFinished:(DataGetter *)dataGetter; 

所以在我的代码,我可以建立多个文件somehere要下载像这样:

// 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"]; 

使用铛静态分析器,上面的每个分配线都会得到'在线分配的对象的潜在泄漏...'错误。那么我将如何释放该对象。它必须留下来,因为它有一个代表。因此,它是确定以释放它作为dataGetterFinished方法的最后一行,像这样

- (void) dataGetterFinished:(DataGetter *)dataGetter 
{ 
// code 
[dateGetter release]; 
} 

......或者我应该以某种方式使用自动释放?

回答

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 

然后在委托方法,简单的从数组中删除,吸气:

- (void) dataGetterFinished:(DataGetter *)dataGetter 
{ 
// code 
[dataGetters removeObject:dataGetter]; 
} 

数组负责保留的对象,而你没有得到分析警告。

只要确保在dealloc方法中释放dataGetters。

+0

谢谢!使用NSMutableArray而不是在委托方法中释放类的优点是什么?只是为了取悦铿锵神? – cannyboy 2010-11-28 20:50:13

相关问题