我已经实现了一个类,我用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。
谢谢!
答案 0 :(得分:2)
是的,它将被保留,直到连接结束(失败,成功ecc)。
这是因为您的Updater实例是NSURLConnection
的委托。
在NSURLConnection
内部文档中,您可以阅读:
注意:在下载期间,连接会保留对委托的强引用。当连接完成加载,失败或被取消时,它会释放强引用。
答案 1 :(得分:-1)
您需要一个强大的参考,可能是'用于更新的ivar或用于更新实例的集合的ivar。即使代表被保留,您也没有解释如何获取数据。