iphone - 如何创建类似 NSURLConnection 的东西?

标签 iphone objective-c cocoa-touch ios nsurlconnection

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/

相关文章:

iphone - 如何在 subview 中处理 UITapGestureRecognizer?

iphone - uiview 中的 uiscrollview

iphone - iOS5 和 iOS 5.1 中按钮上缺少字体文本

objective-c - 如何在 xcode cocoa 项目中创建一个打开文件对话框?

ios - -[NSBundle pathForResource :ofType:inDirectory:] returns nil for localized resources

iphone - AFNetworking HTTP POST上传图像即将完成时停止

iphone - 没有互联网时的 NSURLConnection 行为

iphone - objectForKey,iOS 中的 JSON?不工作!

iphone - 如何将 nil 添加到 nsmutablearray?

iphone - 如何处理 UILabel 上的触摸事件作为 UITableViewCell 的 subview ?