iOS面试题

  1. OC类可以多继承吗?可以实现多接口吗?Category是什么?重写一个类使用继承好还是分类好?
    OC不能多继承,可以实现多接口,通过实现多接口可以完成类似多继承。使用Category好,使用Category只会对本分类有效,不会影响到其他类和原有类关系

  2. import和#include的区别,@class、#import<>和import“”

    import是OC导入的关键字 include是C和C++导入的关键字,使用#import会保证只导入一次,不重复导入,相当于 #include和#pragma once。@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import“”用来包含用户头文件。

  3. 常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int

    答:object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long

  4. 类别的作用?继承和类别在实现中有何不同?
    类别可以在不获悉,不改变原有代码的情况下,向里面添加新的方法,只能添加不能删除和修改。如果和原有类中方法产生冲突,则类覆盖原来的方法,因为类别具有更高的优先级。

  5. 为什么说OC是运行时动态语言
    这里涉及了两个概念:
    运行时:将数据类型的确定由编译时,推迟到了运行时,在运行时才去确定一个对象的类别,以及调用该类别对象指定方法。其为动态语言 即为可以在运行时改变其结构
    多态:不同对象以自己的方式响应相同的消息能力即为多态。

    补充:
    动态可以为:动态类型(比如经过类型判断可以将类型进行转换)、动态绑定(函数和selector的动态绑定)、动态加载(比如根据不同机型加载不同资源文件)