iOS面试题-面试常问问题
1. #include、#import、@class的区别?
- 在C 语言中, 我们使用
#include
来引入头文件,如果需要防止重复导入需要使用#ifndef...#define...#endif
- 在OC语言中, 我们使用
#import
来引入头文件,可以防止重复引入头文件,可以避免出现头文件递归引入的现象。 @class
仅用来告诉编译器,有这样一个类,编译代码时,不报错,不会拷贝头文件.如果需要使用该类或者内部方法需要使用#import
导入
2. id 和 instancetype的区别?
id
可以作为方法的返回以及参数类型 也可以用来定义变量instancetype
只能作为函数或者方法的返回值- instancetype对比id的好处就是: 能精确的限制返回值的具体类型
3. New 作用是什么?
- 向计算机(堆区)申请内存空间;
- 给实例变量初始化;
- 返回所申请空间的首地址;
4.OC实例变量的修饰符? 及作用范围?
@puplic
1.可以在其他类中访问被@public修饰的成员变量
2.也可以在本类中访问被@public修饰的成员变量
3.可以在子类中访问父类中被@public修饰的成员变量
@private1.不可可以在其他类中访问被@private修饰的成员变量
2.也可以在本类中访问被@private修饰的成员变量
3.不可以在子类中访问父类中被@private修饰的成员变量
@protected (默认情况下所有的实例变量都是protected)
1.不可可以在其他类中访问被@protected修饰的成员变量
2.也可以在本类中访问被@protected修饰的成员变量
3.可以在子类中访问父类中被@protected修饰的成员变量
@package介于public和private之间的,如果是在其他包中访问就是private,在当前代码中访问就是public.
5. @proprety的作用
@property = ivar + getter + setter
- 在.h文件中帮我们自动生成
get
和set
方法声明 - 在.m文件中帮我们生成私有的实例变量(前提是没有在.h文件中没有手动生成)
- 在.m文件中帮我们是实现
get和set
方法的实现
- 注意:
在使用@property情况下,可以重写getter和setter方法.需要注意的是, 当把setter和getter方法都实现了之后,实例变量也需要手动添加