ios面试--某宝金融公司

作者: 贝勒老爷 | 来源:发表于2017-08-01 18:05 被阅读472次

    1,描述ios app的生命周期和状态
    1),Not running 未运行 程序没启动
    2),Inactive 未激活 程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态
    3),Active 激活 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式
    4),Backgroud 后台 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态
    5),Suspended 挂起 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

    3,+(void)load +(void)initialize; 有什么用处
    两个方法都可以进行一些类的初始化操作。其中有些小区别。
    +(void)load 方法只要加入了工程中,进行了编译,且.m中实现了这个方法,都会调用一次,值得注意的时没实现的子类是不会调用的,就算父类实现了也不行。
    +(void)initialize 在发送第一条消息给类的时候进行调用,跟load方法的不同之处在于,比较迟,可实现懒加载,且父类.m实现了该方法,子类不实现也会调用父类,跟正常的方法一样。categories,都实现了这个方法,只会调用其中一个,具有不确定性。

    6、类别和类扩展的区别
    *可以进行一些类的初始化操作
    +(void)load 方法只要加入了工程中,进行了编译,且.m中实现了这个方法,都会调用一次,值得注意的时没实现的子类是不会调用的,就算父类实现了也不行。 *
    category和extension区别
    category: 类别,分类
    专门用来给类添加新的方法,不能给类添加成员属性,添加了成员变量,也无法取到
    注意:其实可以通过runtime给分类添加属性
    分类中用@property定义变量,只会生成变量的getter,setter方法的声明,不能生成方法实现和带下划线的成员变量。
    extension:类扩展
    可以说成是特殊的分类,也称作匿名分类,可以给类添加成员属性,但是是私有变量,可以给类添加方法,也是私有方法
    加载时机:
    category加载,把category的实力方法,协议,已经属性添加到类上,把类方法和协议添加到metaclass
    分类加载和方法调用顺序
    加载:先加载原类的+load方法,再加载分类的+load方法,若多个分类,则据编译顺序加载
    调用:先调用分类的方法,再调用原类的方法,分类方法会覆盖原类的方法

    7,block有几种类型?分别是什么?
    根据isa指针,block一共有3种类型的block
    _NSConcreteGlobalBlock 全局静态
    _NSConcreteStackBlock 保存在栈中,出函数作用域就销毁
    _NSConcreteMallocBlock 保存在堆中,retainCount == 0销毁
    二,
    1,单链表反转
    2,设计一个网络数据库

    相关文章

      网友评论

      本文标题:ios面试--某宝金融公司

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