如何在单独的线程中执行NSUrlConnection?
问题描述:
我正在移动我的第一个步骤与网址连接和线程,所以如果这个问题可能会导致微不足道。 基本上我想在一个单独的线程中执行NSUrlConnection(即使这可能导致许多文档状态为'危险')。在决定是否采用这个解决方案之前,我应该设法首先实现它。 现在问题很简单:做这件事的实际代码是什么。 我知道如何在单独的线程中执行NSUrlConnection?
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
执行下载的,我已经试过了,似乎工作。 我已阅读,
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
和
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
将被用于创建一个新的线程
现在,如何将initWithRequest方法添加到线程?两个线程方法似乎都接受一个至多只有一个参数的选择器。 阅读实际所需的代码将非常感激。
谢谢。
答
您可以创建一个方法来照顾创建NSURLConnection和其他相关的东西。
然后,在另一个线程中调用该方法。
- (void)connect
{
NSAutoreleasePool * pool = [ [ NSAutoreleasePool alloc ] init ];
NSURLConnection * theConnection = [ [ NSURLConnection alloc ] initWith ... ];
/* Rest of the code... */
[ pool release ];
}
NSAutoreleasePool是处理自动释放对象所必需的。由于连接方法在不同的线程上执行,因此没有合适的池,您必须自己创建池。
然后创建Connect方法螺纹:
[ NSThread detachNewThreadSelector: @selector(connect) toTarget: self withObject: nil ];
您好,感谢您的回答。我试图按照建议做,新创建的方法设置请求,连接和池。正如我从控制台上看到的那样,它经常在新线程中调用,但是没有任何反应。我的意思是委托连接方法不会被调用。没有附加数据,没有连接成功或失败。任何想法呢? – user236739 2010-04-22 09:35:10
您无法访问NSURLConnection的所有代理。 – Satyam 2010-12-28 11:23:54