美文网首页
面试复习-一些小集合

面试复习-一些小集合

作者: 云无心 | 来源:发表于2021-05-08 15:59 被阅读0次

    集合内部元素如何进行深复制

    1. 使用 initWithArray: copyItems:可以进行集合深复制(需要实现copyWithZone)
    2. 归解档

    单例

    1、alloc和allocWithZone都可以用于创建实例(其实是用于创建实例的时候分配内存空间)
    2、alloc会默认调用allocWithZone方法
    3、如果不重写allocWithZone方法,在调用alloc和allocWithZone方法产生的实例可能不是同一个实例,单例未真正实现

    利用 runloop 解释一下页面的渲染的过程?

    1. 页面被 setNeedDisplay打上脏标记后,在当前runloop beforeWaitting的时候进行绘制。调用 [CALayer display]会去判断自己的代理是否实现了异步绘制代理 displayer: 此方法是异步绘制的入口,如果为实现,则进行系统绘制
    2. 如果已实现 则调用 [layer.delegate drawLayer:inContext:] 子线程代理生成对应bitmap(core grap方法),主线layer.cnotext=bitmap,

    weak原理

    1. weak实现原理 weak内部结构
      1. sideTables weak_table weak_entry_t referrns,锁
    2. retaincount原理
    3. 内存布局

    内存泄漏检测

    MLeaksFinder (https://www.jianshu.com/p/eb2edcd24791?utm_source=desktop&utm_medium=timeline ):hook一些生命周期,用weak若引用,如果x秒后还在,则断言

    • Memory Leaks
    • Alloctions
    • Analyse
    • Debug Memory Graph

    MRC set,get

    - (void)setFssName:(NSString *)fssName {
        if (_fssName != fssName) {
            [_fssName release];
            _fssName = [fssName retain];
        }
    }
    - (NSString *)fssName {
        return [[_fssName retain] autorelease];
    }
    - (void)dealloc {
        [_fssName release];
        [super dealloc];
    }
    

    NSOperation GCD

    1. 可以添加任务依赖,方便控制执行顺序
    2. 可以设定操作执行的优先级
    3. 任务执行状态控制:isReady,isExecuting,isFinished,isCancelled
    4. 最大并发量

    main函数之前

    1. 加载 class protocol +load 分类
    2. 动态链接库加载入内存
    3. 加载可执行文件

    设计原则

    1. 单一职责:view layer
    2. 依赖导致:抽象不依赖实现,实现可依赖抽象。增删改查,业务层依赖抽象接口,不依赖具体实现
    3. 开闭原则:扩展开放,修改关闭。定义一个类,后续扩展性,数据结构定好,就是加接口,需要前期考虑周全
    4. 里氏替换:父类可以被子类替换,且功能无影响,KVO
    5. 接口隔离:专门协议,而不是一个庞大的协议。tableview:dataSource,delegate
    6. 迪米特:高内聚,低耦合。对象对其他类少了解

    Dealloc 实现机制

    1. _objc_rootDealloc()
    • NONPointer_ISA
    • weakly_reference
    • has_assoc
    • has_cxx_dtor
    • has_sidetable_rc
    1. 有以上情况 object_dispose() ,无则free
    2. object_dispose() 流程为 objc_destructInstance() + free()
    3. objc_destructInstance() 为,
      有hasCxxDtor 则 object_cxxDestruct()
      有 hasAssocitatedObjects 则 object_remove_associations()
    4. 再执行 clearDeallocating()
      -sideTable_clearDellocating()
    • weak_clear_no_lock() 弱引用清空
    • table.refcnts.eraser() 引用计数表擦除该对象技术
    1. Dealloc结束

    相关文章

      网友评论

          本文标题:面试复习-一些小集合

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