美文网首页
iOS面试题及答案(二)

iOS面试题及答案(二)

作者: 纳兰沫 | 来源:发表于2019-01-22 10:17 被阅读6次

    非作者原著 来自摘抄

    参考文献

    ptlCoder

    谈谈UITableView的优化

    -  正确的复用cell
    -  设计统一规格的cell
    -  提前计算并缓存好高度(布局) 因为heightForRowAtIndexPath是调用最频繁的方法
    -  异步绘制  
    -  滑动时按需加载 
    -  减少子视图的层级关系
    -  尽量使所有的视图不透明化以及做切圆操作
    -  不要动态的add 或者remove子控件 最后在初始化时就添加完 然后通过hidden来控制
    是否显示
    -  使用调试工具分析问题
    

    什么是野指针 空指针

    野指针 不知道指向哪里的指针是野指针 即指针指向不确定 指针存的地址是一个垃圾值 
    未初始化
    空指针 不指向任何位置的指针叫空指针 即指针没有指向 指针存的地址是一个空地址 
    NULL
    

    什么是OOA OOD OOP

    OOA   (Object Oriented Analysis)     面向对象分析
    OOD   (Object Oriented Design)       面向对象设计
    OOP   (Object Oriented Programming)  面向对象编程
    

    KVO NSNotification delegate以及block区别

    1.KVO 是cocoa框架实现的观察者模式 一般同KVC搭配使用 通过KVO可以检测一个值的变
    化  比如View的高度变化 是一对多的关系 一个值的变化会通知所有的观察者
    2.NSNotification 是通知 也是一对多的使用场景 在某些情况下 KVO和
    NSNotification是一样的 都是在状态变化之后告知对方 NSNotification的特点 就是
    需要被观察者先主动发出通知 然后观察者注册监听后再来进行响应 比KVO多了一个发送
    通知的一步  但是其优点是监听不局限于属性的变化 还可以对多种多样的状态变化进行监
    听  监听范围广 使用也更灵活
    3.delegate 是代理  就是我不想做的事情交给别人做 是一对一的关系
    4.block 是delegate的另一种形式 是函数式编程的一种形式 使用场景跟delegate一样  
    相比delegate更灵活 而且代理的实现更直观
    
    1.KVO 一般的使用场景是数据 需求是数据变化 比如股票价格变化
    2.delegate 一般的使用场景是行为 需求是需要别人帮我做一件事情 比如买卖股票 我们
    一般使用delegate
    delegate 是强关联 就是委托和代理双方互相知道 你委托别人买股票你就需要知道经纪人
    经纪人也不要知道自己的顾客
    3.NSNotification  一般是进行全局通知 比如利好消息一出 通知大家去买
    NSNotification 是弱关联 利好消息发出 你不需要知道是谁发的也可以做出相应的反应
    同理发消息的人也不需要知道接收的人也可以正常发出消息
    

    如何重写类方法

    1.在子类中实现一个同基类名字一样的静态方法
    2.在调用的时候不要使用类名调用 而是使用[self class]的方式调用 原理
    用类名调用是早绑定 在编译器绑定 用[self class]是晚绑定 在运行时决定调用哪个方法
    

    id和NSObject *的区别

    id 是一个objc_object结构体指针 定义是 typedef struct objc_object *id
    - id可以理解为指向对象的指针 所有OC的对象id都可以指向  编译器不会做类型检查 id调
    用任何存在的方法都不会在编译阶段报错 当然如果这个id指向的对象没有这个方法 该崩溃还
    是会崩溃的
    - NSObject *指向的必须是NSObject的子类 调用的也只能是NSObject里面的方法 否则就
    要做强制类型转换
    - 不是所有的OC对象都是NSobject的子类 还有一些继承自NSProxy NSObject *可指向的类
    型是id的子集
    

    你使用过Objective-c的运行时编程吗 如果使用过 你用它做了什么 你还能记得你所使用的相关的头文件或者某些方法的名称吗

    Objective-C的重要特性就是Runtime(运行时) 在#import<objc/runtime.h>下能看到相关
    的方法 用过objc_getClass()和class_copyMethodList()获取过私有API 
    

    你用过NSoperationQueue吗 如果用过或者了解的话 你为什么要使用NSOperationQueue 实现了什么 请描述它和GCD的区别和类似的地方

    - 使用NSOperationQueue用来管理子类化的NSOperation对象 控制其线程并发数目 GCD和
    NSOperation都可以实现对线程的管理 区别是NSOperation和NSOperationQueue是多线程
    的面向对象抽象 项目中使用NSOperation的优点是NSOperation是对线程的高度抽象 在项目
    中使用它 会使项目的程序结构更好 子类化NSOperation的设计思路 是具有面向对象的有点
    (复用 封装) 使得实现是多线程支持 而接口简单  建议在复杂项目中使用
    - 项目中使用GCD的优点是GCD本身非常简单 易用 对于不复杂的多线程操作 会节省代码量 
    而Block参数的使用 会使代码更为易读 建议在简单项目中使用
    

    对于Objective-C 你认为他最大的优点和最大的不足是什么 对于不足之处 现在有没有可用的方法绕过这些不足来实现需求 如果可以的话 你有没有考虑或者实践过重新实现OC的一些功能 如果有 具体会如何做

    最大的优点是它的运行时特性 
    不足是没有命名空间 对应命名冲突 可以使用长命名法或特殊前缀解决 如果是引入的第三方
    库之间的命名冲突 可以使用link命令以及flag解决冲突
    

    相关文章

      网友评论

          本文标题:iOS面试题及答案(二)

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