第七章:系统框架

2016-11-09  本文已影响0人  LucXion

CocoaTouch: Cocoa本身并不是框架,但是里面集成了一批创建应用程序时经常用到的框架,开发者会碰到的主要框架就是Foundation
Foundation:内部的类都使用NS作为前缀,此前缀是在Objective-C语言作为NeXTSTEP系统的编程语言时首都确定的
CoreFoundation:Foundation框架中的的许多功能都能在CoreFoundation中找到对应的C语言API,也叫无缝桥接(可以把CoreFoundation中的C语言数据平滑转化为Foundation中的OC对象,反之亦然)
CFNetWork:提供了C语言级别的网络通信能力,将“BSD套接字”(BSD socket)抽象成易于使用的网络接口。而Foundation则将框架部分内容封装成OC接口(NSURLConnection从URL中下载数据)
CoreAudio: 提供C语言API用来操作设备上的音频硬件,可以抽象出另一套OC的API
AVFoundation: 提供OC的API来回放并录制音频和视频
CoreData:提供OC接口,将对象放入数据库
CoreText:此框架提供的C语言接口可以高效执行文字排版及渲染操作

C语言for遍历字典和NSSet
    NSDictionary *dict;
    NSArray *keyArr = [dict allKeys];
    for (int i = 0; i < keyArr.count; i++) {
        id key = keyArr[i];
        id value = dict[key];
        NSLog(@"%@",value);
    }
    
    NSSet *set;
    NSArray *objectArr = [set allObjects];
    for (int i = 0; i < objectArr.count; i++) {
        NSLog(@"%@",objectArr[i]);
    }
For循环的优势: 反向遍历

Objective-C 1.0 :NSEnumerator遍历,读写更为顺畅
    //NSArray
    NSArray *arr;
   //反向遍历数组枚举器 [arr reverseObjectEnumerator];
    NSEnumerator *enumerator = [arr objectEnumerator];
    
    id object;
    while ((object = [enumerator nextObject]) != nil) {
        //do Something With object
    }
    
    //NSDictionary
    NSDictionary *dict;
    NSEnumerator *keyEnumerator = [dict keyEnumerator];
    
    id key;
    while ((key = [keyEnumerator nextObject]) != nil) {
        id value = dict[key];
    }
    
    //NSSet
    NSSet *set;
    NSEnumerator *setEnumerator = [set objectEnumerator];
    
    id object;
    while ((object = [setEnumerator nextObject]) != nil) {
        //do Something With object
    }

object-c 2.0 引入了快速遍历这一功能  for in

最新的遍历模式:“块枚举法”
    dict enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions) usingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
    //可根据 NSEnumerationOptions 枚举,使用并发事宜
    }

使用场景:下载网络图片
NSCache的优势:

  1. 低内存警告自动删减缓存(优先删除最久未使用的对象)
  2. 键可以由不支持拷贝的对象来担任
  3. 线程安全
  4. 可控缓存删减的时机 (总开销值、对象总数)
//NSPurgeableData 为 NSMutableData 的子类
    NSPurgeableData *pData = [NSPurgeableData new];
    //类似引用计数, 创建对象的时候会 + 1 ,获取的时候才需要beginContentAccess
//    [pData beginContentAccess];
    [pData endContentAccess];

计时器会保留其目标对象,直到自身失效后才释放。一次性计时器,执行完相关任务后就会自动失效,重复性计时器必须手动释放invalidate

上一篇下一篇

猜你喜欢

热点阅读