NSURL *URL = [NSURL URLWithString:@"http://www.stackoverflow.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
使用这么简单的代码,我可以在我的应用程序中加载网页。我不必担心保留或释放 NSURLConnection
,它会在加载完成后自动释放。
我正在围绕 NSURLConnection、JSONConnection
创建某种包装器。它允许我从网页加载 JSON 值并在 NSDictionary
中自动解析它。现在,我必须像这样使用它:
JSONConnection *tempJSONConnection = [[JSONConnection alloc] initWithURLString:@"http://www.stackoverflow.com" delegate:self];
self.JSONConnection = tempJSONConnection;
[tempJSONConnection release];
然后,加载完成后,我调用 self.JSONConnection = nil;
。
我想要的是这样做:
JSONConnection *connection = [JSONConnection connectionWithURLString:@"http://www.stackoverflow.com" delegate:self];
我知道如何创建这个方法。我只是不知道如何在 runloop 完成并且自动释放池耗尽时保持 connection
事件,并确保 connection
在加载完成后被释放。换句话说,我不知道如何复制 NSURLConnection
的确切行为。
最佳答案
对于所有意图和目的,从外部来看,NSURLConnection 有效地保留了它自己。这可以通过发送
[self retain];
当开始连接然后
[self release];
完成并通知代表后;或者它是通过将自身置于当前打开的连接池中并在完成时将其从该池中删除来完成的。
您实际上不必执行任何这些操作。 NSURLConnection 保留其委托(delegate),因此您的 JSON 连接类应创建一个 NSURLConnection,将其自身作为 NSURLConnection 的委托(delegate)进行传递。这样它至少会和 NSURLConnection 一样长。它应该在方法 -connectionDidFinishLoading:
中将 JSON 解析为字典,并在返回之前将字典传递给它的委托(delegate)。返回后 NSURLConnection 将释放并可能释放自身并释放您的 JSON 连接。
关于iphone - 如何创建类似 NSURLConnection 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114266/