深入iOS 5:解析两大隐藏特性
JSON序列化iOS 5加入了NSJSONSerialization类,可以将JSON和Foundation objects相互转换。来看一段图片的代码示例:
[*]{"taken": "2011/07/13"
[*]"width": "3072",
[*]"height": "2304",
[*]"latitude": "39.52",
[*]"longitude": "-106.05",
[*]"url": "http://mypictures.com/12345.png"
[*]}
解析起来很简单,代码示例:
[*]NSError *error = nil;
[*]NSData *data = ;
[*]NSDictionary *photo = [NSJSONSerialization
[*]JSONObjectWithData:data
[*]options:NSJSONReadingMutableLeaves
[*]error:&error];
[*]NSNumber *width = ;
[*]NSNumber *height = ;
齐活儿。不要另外去下载类库啊啥的,示例中的JSONOBjectWithData:options:error:方法具体是将数据参数转向NSDictionary。
NSJSONSerialization可以很容易的将数据解析到内存或者Stream里,对于大数据来说,用Stream的优势更明显,可以将数 据分块来一点点的处理掉,从而使得内存资源得到尽量稀少的占用。再看一段示例,同上一段不同的是这次使用了JSONOBjectWithStream: variant方法:
[*]NSError *error = nil;
[*]NSStream *stream = ;
[*]NSDictionary *photo = [NSJSONSerialization
[*]JSONObjectWithStream:stream
[*]options:NSJSONReadingMutableLeaves
[*]error:&error];
[*]NSNumber *width = ;
[*]NSNumber *height = ;
iOS对JSON的支持甚至更进了一步,可以产生JSON数据。
ARC(自动引用计数)
很多用惯了有垃圾回收机制开发语言的开发者,用Objective-C会很不习惯,总是要进行很多内存管理的工作。苹果觉得垃圾回收这种严重影响电源使用效率的特性,同移动设备天生的实时性是相冲突的。但是在iOS 5当中苹果引入了自动内存管理机制,称作ARC。
为了解决保留/释放内存管理,ARC加入了一个新的概念称作“归零弱引用”,弱引用一旦不再没引用机会被清零。至此所有弱引用不再会指向悬摆指针,而是被自动清理掉。
如果你用ARC,那么必须向编译器声明你用Core Foundation对象干吗,否则会报错。先看一个可以导致报错的例子:
[*]NSDictionary *values =
[*] ;
[*] dictionary = (CFDictionaryRef)values;
[*]SomeFunctionCallThatNeesACFDictionary(dictionary);
如果只是想用dictionary作为CFDictionaryRef类,只需加一个 __bridge 就可以来。再来看正确的示例:
[*] NSDictionary *values =
[*] ;
[*]CFDictionaryRef dictionary = (__bridge CFDictionaryRef)values;
[*]SomeFunctionCallThatNeesACFDictionary(dictionary);
[*]NSDictionary *values =
[*] ;
[*]CFDictionaryRef dictionary = (__bridge CFDictionaryRef)values;
[*]SomeFunctionCallThatNeesACFDictionary(dictionary);
【编辑推荐】
[*]苹果升级iOS 5解决iPhone 4S耗电过快问题
[*]斯坦福大学推出iOS 5应用开发免费在线课程
[*]苹果iOS 5.0.2推迟发布 电池问题待解决
[*]如何避开iOS 5开发中的陷阱
[*]苹果宣布停止在iOS 5平台运行Carrier IQ
页:
[1]