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,设计一个网络数据库