美文网首页
2020-10-12

2020-10-12

作者: 鄭经仁 | 来源:发表于2020-10-12 16:53 被阅读0次

    面试题

    1.weak属性如何自动置nil的?

    Runtime会对weak属性进行内存布局,构建hash表:以weak属性对象内存地址为key,weak属性值(weak自身地址)为value。当对象引用计数为0 dealloc时,会将weak属性值自动置nil

    2.KVO底层实现原理?手动触发KVO?swift如何实现KVO?

    KVO原理:当观察一个对象时,runtime会动态创建继承自该对象的类,并重写被观察对象的setter方法,重写的setter方法会负责在调用原setter方法前后通知所有观察对象值得更改,最后会把该对象的isa指针指向这个创建的子类,对象就变成子类的实例。

    如何手动触发KVO:在setter方法里,手动实现NSObject两个方法:willChangeValueForKey、didChangeValueForKey

    swift的kvo:继承自NSObject的类,或者直接willset/didset实现。

    3.KVC原理,项目用到的地方

    KVC(Key-value coding)键值编码,顾名思义。额,简单来说,是可以通过对象属性名称(Key)直接给属性值(value)编码(coding)“编码”可以理解为“赋值”。这样可以免去我们调用getter和setter方法,从而简化我们的代码,也可以用来修改系统控件内部属性

    字典转模型 xib里设置图片圆角

    4、分类categroy为什么不能添加属性?怎么实现添加?与扩展Extension的区别?category覆盖原类方法?多个category调用顺序

    Runtime初始化时categroy的内存布局已经确定,没有ivar,所以默认不能添加属性。

    使用runtime的关联对象,并重写setter和getter方法。

    Extenstion编译期创建,可以添加成员变量ivar,一般用作隐藏类的信息。必须要有类的源码才可以添加,如NSString就不能创建Extension。

    category方法会在runtime初始化的时候copy到原来前面,调用分类方法的时候直接返回,不再调用原类。如何保持原类也调用( https://www.jianshu.com/p/40e28c9f9da5)。

    1

    5.、guard与defer

    guard用于提前处理错误数据,else退出程序,提高代码可读性

    defer延迟执行,回收资源。多个defer反序执行,嵌套defer先执行外层,后执行内层

    相关文章

      网友评论

          本文标题:2020-10-12

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