美文网首页
第七章:系统框架

第七章:系统框架

作者: LucXion | 来源:发表于2016-11-09 20:36 被阅读0次

    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语言接口可以高效执行文字排版及渲染操作

    • 技巧三十三:多用块枚举,少用for循环
    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 而非 NSDictionary

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

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

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

    相关文章

      网友评论

          本文标题:第七章:系统框架

          本文链接:https://www.haomeiwen.com/subject/xustpttx.html