iOS 4.3对AFNetworking的支持-可能存在什么问题



我已经开发了一个支持iOS 4.3+的应用程序。我想从ASIHTTPRequest转移到AFNetworking,但在文档上说我应该使用0.10.x模块,而不是当前的模块。https://github.com/AFNetworking/AFNetworking#requirements使用AFNetworking的当前代码(1.x)的问题是(https://github.com/AFNetworking/AFNetworking/issues/545):

  1. 1.x中的ARC介绍
  2. NSJSON系列化的使用
  3. imp_implementationWithBlock()API差异

但是iOS 4.3支持ARClite,并且通过1.x的代码,我没有发现任何使用弱引用的属性会导致问题。http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/_index.htmliOS 4.3支持imp_implementationWithBlock()只有两个引用使用NSJSONSerialization,我将它们更改为JSONKit调用->

diff --git a/AFNetworking/AFHTTPClient.m b/AFNetworking/AFHTTPClient.m
index 62fc30a..3a60da5 100755
--- a/AFNetworking/AFHTTPClient.m
+++ b/AFNetworking/AFHTTPClient.m
@@ -24,6 +24,7 @@
#import "AFHTTPClient.h"
#import "AFHTTPRequestOperation.h"
+#import "JSONKit.h"
#import <Availability.h>
@@ -163,7 +164,7 @@ - (NSString *)URLEncodedStringValueWithEncoding:(NSStringEncoding)stringEncoding
static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
NSError *error = nil;
-    NSData *JSONData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];;
+    NSData *JSONData = [parameters JSONDataWithOptions:JKSerializeOptionNone error:&error];
if (!error) {
return [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding];
diff --git a/AFNetworking/AFJSONRequestOperation.m b/AFNetworking/AFJSONRequestOperation.m
index 607f247..c7367dc 100755
--- a/AFNetworking/AFJSONRequestOperation.m
+++ b/AFNetworking/AFJSONRequestOperation.m
@@ -21,6 +21,7 @@
// THE SOFTWARE.
#import "AFJSONRequestOperation.h"
+#import "JSONKit.h"
static dispatch_queue_t af_json_request_operation_processing_queue;
static dispatch_queue_t json_request_operation_processing_queue() {
@@ -66,7 +67,7 @@ - (id)responseJSON {
if ([self.responseData length] == 0) {
self.responseJSON = nil;
} else {
-            self.responseJSON = [NSJSONSerialization JSONObjectWithData:self.responseData options:0 error:&error];
+          self.responseJSON = [self.responseData objectFromJSONDataWithParseOptions:JKSerializeOptionNone error:&error];
}
self.JSONError = error;

虽然这个汇编很漂亮,但我仍然对这样做持怀疑态度。这是一条正确的路吗?

您可以更改以下内容以使AFNetworking>=1.0在iOS上编译<5,但不建议这样做,因为后续版本中可能会发生其他中断更改。

但是,如果你乐于创建一个不能包含主线错误修复和功能的分叉,那么你的方法本身就没有什么问题。

相关内容

  • 没有找到相关文章

最新更新