异步请求能不能封装诚一个公用的类?每个页面都要copy一下几个方法,感觉很麻烦

iOS 码拜 9年前 (2015-05-07) 705次浏览 0个评论
 

NSURLConnection 异步请求能不能封装诚一个公用的类?   

异步请求能不能封装诚一个公用的类?每个页面都要copy一下几个方法,感觉很麻烦,

但是如果封装诚一个公共的类,又如何通知请求的页面返回数据?

//发送异步get请求
-(IBAction)BeginRequest:(NSString *)urlRequest
{

}

– (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [receivedData setLength:0];
}

//接收NSData数据
– (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [receivedData appendData:data];
}
– (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    
}
//接收完毕,显示结果
– (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    
    
    
}  

关于http请求建议使用ASIHTTPRequest
关于这个类的封装就比较麻烦了
首先这个类需要有个set表,然后需要有个类似addDelegate这样的方法,这个方法主要是把当前类添加到这个类的set表中,然后在公用方法(如connectionDidFinishLoading)中,首先找到set表中的当前类,然后调用当前类的某个方法(该方法类似回调)
假如该封装类为A,发送请求的类为B,首先B中需要生成A的对象,然后调用A的addDelegate:self,把B自己加到A中的set表,然后B发送请求(类似[[NSURLConnection alloc] initWithRequest:mRequest delegate:A startImmediately:YES];)一定注意要将connection的delegate置为A,假如1秒后异步请求相应了,此时会调用A中的回调函数(如connectionDidFinishLoading),然后在回调方法中首先找到set中的B,然后调用B中的回调方法,同时将值传过去
说的可能是太清楚,不知道你能不能理解 – –
自己封装一个delegate,然后在delegate里面用NSInvocation传递不同的页面处理函数。
ASIHTTPRequest的异步请求也有三个方法。跟connection差不多。
我不赞同用的时候拷贝一下,我还是感觉写个父类比较好。用的时候可以继承这个类。写程序最好还是避免复制粘贴。维护起来可是灾难性的
引用 3 楼 zzxap 的回复:

ASIHTTPRequest的异步请求也有三个方法。跟connection差不多。

“关于http请求建议使用ASIHTTPRequest”这句我只是提了一下asi,跟下面的类封装没有关系,我下面写的就是对NSURLConnection中的回调方法进行的封装,想要封装必须有个set,每次发送请求前加入set,回调传值结束后还要从set中删除

40分
感觉在这里说不明白,专门为这个问题写了篇博客
http://blog.csdn.net/volcan1987/article/details/6685195

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明异步请求能不能封装诚一个公用的类?每个页面都要copy一下几个方法,感觉很麻烦
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!