IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Cocoa网络编程总结之NSURLConnection

    helloitworks发表于 2014-04-29 11:44:19
    love 0
    CoreFoundation中提供了一个类NSURLConnection,用于处理用户的网络请求,NSURLConnection基本可以满足我们大多数的网络请求操作。
    因为在项目中用得比较多,在此对NSURLConnection的使用做一番简洁的总结。

    1、同步请求,采用sendAsynchronousRequest

    + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
    这个同步请求是阻塞的,并且不可以中途cancel掉
    我们可以将同步请求放到主线程之外的线程中,执行效果也会类似于异步,比如放到gcd的dispatch_async里面执行
    示例在源代码中的sendSynchronousRequestExample函数

    2、异步请求,采用sendAsynchronousRequest

    + (void)sendAsynchronousRequest:(NSURLRequest*) request
                              queue:(NSOperationQueue*) queue
                  completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler NS_AVAILABLE(10_7, 5_0);
    这个异步请求是非阻塞的,异步执行后把结果通过block回调回来
    不能中途cancel掉
    示例在源代码中的sendASynchronousRequestExample函数

    3、异步请求,采用initWithRequest

    - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;

    可以在delegate类里面的下列代理函数,获取异步请求的返回的数据与结果

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    这个异步请求是非阻塞的,异步执行后把返回的数据与结果通过delegate函数回调回来
    可以采用cancel中途取消
    示例在源代码中的initWithRequestExample函数
    另外,我们可以调用NSURLRequest 的函数setHTTPMethod,来决定是采用get还是post方式,比如post方式:[urlRequest setHTTPMethod:@"POST"];post方式的示例在源代码中的initWithRequestPostExample函数

    4、第三方的网络组件

    除了NSURLConnection之外,还有第三方的网络组件,比如ASIHTTPRequest跟AFNetworking,都是大家用得比较多的。这些第三方的网络组件封装了一些常用功能,满足基本需求,同时也做了更多的扩展,可以处理更加复杂的需求。

    想实现更复杂的功能,甚至可以直接用socket,因为socket才是最底层的

    源代码:
    https://github.com/helloitworks/NSURLConnection

    参考资料:
    https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE



沪ICP备19023445号-2号
友情链接