iOS 5两大隐藏特性
来源:互联网 发布:斯嘉丽 约翰逊 知乎 编辑:程序博客网 时间:2024/05/16 07:09
转自 http://blog.csdn.net/zhaozy55555/article/details/8441671
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 = [NSData dataWithContentsOfURL:webServiceURL];
- NSDictionary *photo = [NSJSONSerialization
- JSONObjectWithData:data
- options:NSJSONReadingMutableLeaves
- error:&error];
- NSNumber *width = [photo objectForKey:@"width"];
- NSNumber *height = [photo objectForKey:@"height"];
齐活儿。不要另外去下载类库啊啥的,示例中的JSONOBjectWithData:options:error:方法具体是将数据参数转向NSDictionary。
NSJSONSerialization可以很容易的将数据解析到内存或者Stream里,对于大数据来说,用Stream的优势更明显,可以将数 据分块来一点点的处理掉,从而使得内存资源得到尽量稀少的占用。再看一段示例,同上一段不同的是这次使用了JSONOBjectWithStream: variant方法:
- NSError *error = nil;
- NSStream *stream = [self getMyStream];
- NSDictionary *photo = [NSJSONSerialization
- JSONObjectWithStream:stream
- options:NSJSONReadingMutableLeaves
- error:&error];
- NSNumber *width = [photo objectForKey:@"width"];
- NSNumber *height = [photo objectForKey:@"height"];
iOS对JSON的支持甚至更进了一步,可以产生JSON数据。
ARC(自动引用计数)
很多用惯了有垃圾回收机制开发语言的开发者,用Objective-C会很不习惯,总是要进行很多内存管理的工作。苹果觉得垃圾回收这种严重影响电源使用效率的特性,同移动设备天生的实时性是相冲突的。但是在iOS 5当中苹果引入了自动内存管理机制,称作ARC。
为了解决保留/释放内存管理,ARC加入了一个新的概念称作“归零弱引用”,弱引用一旦不再没引用机会被清零。至此所有弱引用不再会指向悬摆指针,而是被自动清理掉。
如果你用ARC,那么必须向编译器声明你用Core Foundation对象干吗,否则会报错。先看一个可以导致报错的例子:
- NSDictionary *values =
- [NSDictionary dictionaryWithObject:@"object" forKey:@"key"];
- dictionary = (CFDictionaryRef)values;
- SomeFunctionCallThatNeesACFDictionary(dictionary);
如果只是想用dictionary作为CFDictionaryRef类,只需加一个 __bridge 就可以来。再来看正确的示例:
- NSDictionary *values =
- [NSDictionary dictionaryWithObject:@"object" forKey:@"key"];
- CFDictionaryRef dictionary = (__bridge CFDictionaryRef)values;
- SomeFunctionCallThatNeesACFDictionary(dictionary);
- NSDictionary *values =
- [NSDictionary dictionaryWithObject:@"object" forKey:@"key"];
- CFDictionaryRef dictionary = (__bridge CFDictionaryRef)values;
- SomeFunctionCallThatNeesACFDictionary(dictionary);
- iOS 5两大隐藏特性
- iOS 5两大隐藏特性
- iOS 5两大隐藏特性
- 深入iOS 5:解析两大隐藏特性
- 专利权发明的两大特性
- iOS 7:隐藏的特性和解决之道
- iOS 7:隐藏的特性和解决之道
- iOS 7: 隐藏的特性和解决之道
- iOS隐藏状态栏的两种方法
- java基础之三大特性封装和隐藏
- iOS 隐藏导航栏底部线的两种方法
- RDD的5大特性
- RDD的5大特性
- iOS 隐藏系统tabBar及需要push两层时候tabBar的隐藏方法
- 黑马程序员- IOS学习笔记-OC三大特性
- IOS开发之三大特性(继承)
- IOS开发之三大特性(多态)
- iOS之05-三大特性之封装
- this 和 getApplicationContext Context的区别
- 最近心情
- CGRectInset、CGRectOffset、frame和bounds对比
- MVVM系列--Windows 8应用无法在Blend显示design time data
- web前端研发工程师编程能力成长之路 [转]
- iOS 5两大隐藏特性
- POJ1962 Corporative Network
- 视频教程
- UIView的autoresizingMask
- cocoa 一些回调函数被调用的时机
- Buffer创始人谈开发:先验证,后编程!
- CSLinearLayoutView
- 本地推送
- java实现文件下载 中文文件名乱码的解决