执行网络异步请求的自定义类的内存管理

时间:2013-07-14 18:56:02

标签: ios memory-management asynchronous automatic-ref-counting nsurlconnection

我已经实现了一个类,我用NSURLConnection封装了一个异步请求及其委托方法。每当点击其视图的按钮时,我在视图控制器中创建此类的实例,并且我要求它发出网络请求:

- (IBAction)getData:(id)sender
{
   // Perform network request
   Updater *updater = [[Updater alloc] init];
   [updater queryService:self.date];
}

这样的queryService:方法是这样的:

- (void)queryService:(NSDate *)date
{
   self.responseData = [NSMutableData data];

   NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:kTimeout];
   NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
}

由于Updater正在执行异步操作,我不确定updater实例(我已声明为局部变量)是否会保留到connection:didFailWithError:或{{调用1}},或者我为调用视图控制器中的connectionDidFinishLoading:创建strong属性。我正在使用ARC。

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,它将被保留,直到连接结束(失败,成功ecc)。 这是因为您的Updater实例是NSURLConnection的委托。

NSURLConnection内部文档中,您可以阅读:

  

注意:在下载期间,连接会保留对委托的强引用。当连接完成加载,失败或被取消时,它会释放强引用。

答案 1 :(得分:-1)

您需要一个强大的参考,可能是'用于更新的ivar或用于更新实例的集合的ivar。即使代表被保留,您也没有解释如何获取数据。