面试题 -- OC基础知识

1. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

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

2. Category是什么?类别(category)的作用?

Category是类别,用Category重写类的方法,它仅仅只对本Category有效,并不会影响到其他类和原有类的关系。

  1. 创建私有方法的向前引用
  2. 分散类的实现
  3. 实现非正式协议

3. Object-c的类可以多重继承么?可以实现多个接口么?继承和类别在实现中有何区别

oc不可以有多继承,可以用Protocol委托代理实现多个接口

区别:

  1. 继承是“:”加父类名字,类别是声明类别名字和加到的类
  2. 和类中方法重名,类别中的方法有更高优先级,类本身的方法将没有作用
  3. 类别是对类的新增扩展不能修改一个类,继承不仅新增扩展能修改删除的类中的方法;
  4. 类别是对方法的扩展,继承可以派生出新的属性和新的成员变量
     

4. OC动态运行时语言是什么意思?

  1. 不同的对象可以接收相同的消息,可以去做不同的实现
  2. OC语言将数据类型的确定由编译时,推迟到了运行时
  3. 运行时的调用
<obj/runtime.h>
obj_sendMsg(id reciver, selector);
[obj method];

id声明的对象有什么特性

id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;

5. 方法和选择器有何不同?

  1. 方法是包括声明和实现两部分,
  2. 选择器是方法的名称
    performselector:(SEL)

猜你喜欢

转载自blog.csdn.net/guoxulieying/article/details/131960811