文档详情

ios异步请求架构.doc

发布:2018-03-20约2.03万字共38页下载文档
文本预览下载声明
很早就在cocoachina上看到这个框架了,今天终于有机会来使用这个东东了. 我这里写一下,如何往iphone项目中添加这个框架. 步骤如下: ? 1.下载该framework : /pokeb/asi-http-request/tree 2.将class根目录下的文件全拷贝到自己的项目中,另外还要在 External/Reachability/下将其中的Reachability.h/m 也拷贝到自己的项目中. 3.添加需要的framework.可以参考 /ASIHTTPRequest/Setup-instructions 需要额外添加的有: CFNetwork.framework, MobileCoreServices.framework,SystemConfiguration.framework,libz.1.2.3.dylib,libxml2.dylib ? 然后运行项目,会发现有很多xml相关的error,不用急,这时因为libxml2.dylib这个framework(这个框架不是很friendly,我们还需要做一些工作). 在xcode中project-edit project settings-然后search search paths,然后在path中添加 /usr/include/libxml2 ? 这样就ok了,可以根据官方的教程来学习了. /ASIHTTPRequest/How-to-use ? 我下了一个sample code??XMLPerformance 解析xml,我建了一个工程照着上面做,但是编译时提示错误,?error libxml/tree.h: No such file or directory?我立刻想到没有add Frameworks ,我把libsqlite3.dylib 和 libxml2.dylib都加进去了,但是还是报错。?error libxml/tree.h: No such file or directory?An error on the .h is a compile-time error with your Header Search Paths, not a .dylib or a linker error.?You have to ensure that /usr/include/libxml2 is in your Header Search Paths in your Release configuration。 在iphone开发中,异步操作是一个永恒的话题,尤其当iphone手机需要和远程服务器进行交互时,使用异步请求是很普遍的做法。 通常,这需要NSURLConnection和NSOperation结合起来使用。这方面的资料网络上自然有不少的介绍,不过要找一个能运行的代码也并不容易。许多文章介绍的并不全面,或者使用了过时的SDK,在新IOS版本下并不适用(当前最新的ios是4.2了)。这些代码很经典,但仍然很容易使人误入歧途。 本文总结了众多文档介绍的方法和代码,揭示了异步操作中的实现细节和初学者(包括笔者)易犯的错误,使后来者少走弯路。 一、使用NSOperation实现异步请求 1、新建类,继承自NSOperation。 @interface URLOperation : NSOperation { ??? NSURLRequest*? _request; ??? NSURLConnection* _connection; ??? NSMutableData* _data; ??? //构建gb2312的encoding ??? NSStringEncoding enc; ??? } ? - (id)initWithURLString:(NSString *)url; @property (readonly) NSData *data; @end 接口部分不多做介绍,我们来看实现部分。 首先是带一个NSString参数的构造函数。在其中初始化成员变量。 其中enc是 NSStringEncoding 类型,因为服务器返回的字符中使用了中文 ,所以我们通过它指定了一个gb2312的字符编码。 许多资料中说,需要在NSOperation中重载一个叫做isConcurrent的函数并在其中返回YES,否则不支持异步执行。但是实际上,我们在这里注释了这个重载方法,程序也没有报任何错误,其执行方式依然是异步的。 @implementation URLOperation @synthesize data=_data; - (id)initWithURLString:(NSString *)url { ??? if (self = [self init]) {
显示全部
相似文档