Man*_*nni 11 iphone multithreading objective-c request ios
我想启动一个服务器请求,你可以取消.
我的想法是在一个线程中启动请求,以便用户界面不会冻结.因此,您可以通过单击"取消"按钮来终止包括请求在内的整个线程.
使用Android它可以工作:服务器请求在"AsyncTask"和"onReturn()"中启动 - 方法我可以在服务器请求完成后立即做出反应.
如何在iOS上使用Objective-C实现这一点?我的第一次尝试是"NSInvocationOperation".您可以取消操作,但在请求完成且结果可用时很难处理.我认为NSInvocationOperation不是我的问题的解决方案.
你会推荐给我吗?NSThread是我的正确选择吗?
非常感谢你!
注意!
这是一个非常古老的答案现在只是为了历史目的.
精彩的ASIHttpRequest库不再存在; 技术现在完全不同了.
使用ASIHttpRequest执行此操作简直令人难以置信.
(异步是如此简单,没有理由你不会异步地执行它.)
以下是一些可能让您入门的粗略摘录.
...
ASIFormDataRequest *request;
...
NSURL *url = [NSURL URLWithString:@"https://blah.blah/blah.cgi?blah"];
request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"fred" forKey:@"username"];
[request setPostValue:@"flint" forKey:@"passie"];
[request setPostValue:@"stone" forKey:@"town"];
// send up data...
[request setData:[NSData dataWithBytes:blah length:blah] forKey:@"thefile"];
// or perhaps something like...
[request setData:imageData withFileName:@"blah.png"
andContentType:@"image/jpeg" forKey:@"photoimage"];
[request setDelegate:self];
[request setDidFinishSelector:@selector(postingDone:)];
[request setDidFailSelector:@selector(postingDoneProblem:)];
[request startAsynchronous];
...
-(void) postingDone:(ASIHTTPRequest *)request
{
// it worked
}
-(void) postingDoneProblem:(ASIHTTPRequest *)request
{
// failed
}
Run Code Online (Sandbox Code Playgroud)
真的不容易.你基本上只是输入字段和值.
根据您的问题,这里是您取消"飞行中"请求的方法 ...只需将委托设置为nil然后"取消"它.
[myRequest setDelegate:nil];
[myRequest cancel];
[myRequest release];
Run Code Online (Sandbox Code Playgroud)
ASIHttpRequest是"奇迹库".如果您是iOS新手,ASIHttpRequest只是最常用的第三方库.从本质上讲,300,000个iPhone应用程序的每个iPhone应用程序都使用它.
如果可能的话,一定要向这个人捐出几块钱 - 如果他停止支持那个库,那么就会有100,000名iPhone程序员受到攻击!
文档是微不足道的,孩子可以遵循它:
http://allseeing-i.com/ASIHTTPRequest/How-to-use
"创建异步请求"
它可能 - 几乎可以肯定 - 是任何平台上最令人惊讶的简单网络库.做你所描述的,愉快的是微不足道的.请享用.
归档时间: |
|
查看次数: |
4221 次 |
最近记录: |