美文网首页
iOS Object—c 面试基础复习整理 一

iOS Object—c 面试基础复习整理 一

作者: 河马咕嘟 | 来源:发表于2021-03-29 14:47 被阅读0次

    iOS开发需要扎实的计算机基础知识,包括基础的算法和数据结构,常用设计模式,网络通信协议,数据安全;其次要求iOS基础扎实,熟练使用常用UI组件和网路组件,优秀的代码设计能力,避免第几错误,理解各个框架实现原理

    React native (facebook 2015 年出 ,lean once ,write anywhere ,跨平台UI框架)

    Weex (vue native 阿里巴巴 2016 都是javaScript 引擎调用原生代码)

    一名出色的程序猿必备的知识点
    1,object -c ,swiift

    2,UIkit ,Foundation 两个库的应用

    3,iOS app 以及系统的运行机制

    优秀博客推荐

    https://onevcat.com

    **接下来进入OC的知识 **

    @property….. 会自动生成 setter getter 方法

    如果不想用可以用@dynamic 禁止存取方法自动合成

    ** atomic / nonatomic (原子性/非原子性)**

    在多行程中,同一个变量可能被多个线程访问,甚至更改,进而造成数据污染,OC默认是atomic 即会对setter方法加锁
    如果不是特殊情况,一般还是用nonatomic 来修饰变量,以提高多线程并发的性能

    readonly /readwrite (只有get方法/get ,set方法都有)

    getter = <> ,setter = <> 可以指定的在括号里指定存取方法名

    @property(nonatomic, getter=getName, copy) NSString *name;

    s = [test getName];

    assign : 直接简单赋值,对象引用计数不会增加,用于修饰非OC类型,主要指基础数据类型,和C数据类型(int float double char 等)或者修饰对弱指针的引用,

    weak: 修饰弱引用,和strong/retain 相对,和assin相似,但是当weak修饰的对象消失后 会自动把指针设置nil 防止出现悬挂指针.

    retain: 常用于引用类型,为了持有对象,声明强引用,将指针指向的旧的对象释放,然后将指针指向新的对象,同时新的对象引用计数加一.

    strong : 原理和retain一样,不过ARC 用strong 代替了retain

    copy : 建立一个和旧对象内容一样,引用计数为1的新对象,释放指针之前指向的旧对象, 一般NSSting ,delegate 用copy

    多态

    不同子对象对同一个父类的同一方法的不同响应

    OC只支持单一继承,可以利用代理协议 Protocol 实现多个接口

    重写一个类一般用category(类别),这个不会影响原有类和其他类的关系.

    深拷贝/浅拷贝 == copy/ mutableCopy == 指针拷贝 /内容拷贝

    对于可变的集合对象 两个都是内容copy,其成员都是指针copy ,不可变集合则满足copy/mutablecopy 定义

    内存泄漏 查找解决

    Xcode 自带 instrument leaks (没有手动释放 leaked memory ) allocations (循环引用 abandon memory )

    腾讯WeRead 团队出品 MLeaksFinder

    简单集成到app,没有代码侵入性, 主要原理是 在基类 nsobject 里添加一个 willDelloc 方法,把self指向一个弱指针,等待2秒 一会儿去调用 assertNotDelloc 方法 ,如果没有释放就会调用到 然后递归便利 调用整个viewcontrooler 树 若存在没有释放的 则弹框告知内存泄漏

    例外机制

    对于有些 ViewController, 比如单例或者被 cache 起来复用的 View 或 ViewController、 释放不及时的 View 或 ViewController,在被 pop 或 dismiss 后,不会被释放(比如单例),因此需要提供机制让开发者指定哪个对象不会被释放,这里可以通过重载上面的 -willDealloc 方法,直接 return NO 即可。

    查找其他对象中的泄漏

    MLeaksFinder目前只检测 ViewController 跟 View 对象。为此,MLeaksFinder 提供了一个手动扩展的机制,你可以从 UIViewController 跟 UIView 出发,去检测其它类型的对象的内存泄露。如下所示,我们可以检测 UIViewController 底下的 View Model:

    [图片上传失败...(image-253514-1617000389824)]

    **内存泄漏的一些情况 和解决办法 **


    (BOOL )wi11Dealloc.png

    delegate NStimer block

    一般都是强引用导致

    比如delegate 要用weak修饰 ,nstimer 要在合适的地方释放在 回掉方法 里面 invalidate 然后设置nil ,block 要在外面 __weak typedof (self) sw = self 对内部属性弱引用 ,但是有时侯 block期间也会导致 外部属性提前释放,所以需要 —strong typedof(self) strongSw = sw ; 保持在bock期间属性不会释放 ,等block结束后会自行释放.

    悬垂指针 : 内存已经释放,指针还在 迷途指针;

    野指针: 没有初始化的指针都是野指针;

    相关文章

      网友评论

          本文标题:iOS Object—c 面试基础复习整理 一

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