iOS面试题-面试常问问题

1. #include、#import、@class的区别?

  • 在C 语言中, 我们使用 #include 来引入头文件,如果需要防止重复导入需要使用#ifndef...#define...#endif
  • 在OC语言中, 我们使用#import来引入头文件,可以防止重复引入头文件,可以避免出现头文件递归引入的现象。
  • @class仅用来告诉编译器,有这样一个类,编译代码时,不报错,不会拷贝头文件.如果需要使用该类或者内部方法需要使用 #import导入

2. id 和 instancetype的区别?

  • id可以作为方法的返回以及参数类型 也可以用来定义变量
  • instancetype 只能作为函数或者方法的返回值
  • instancetype对比id的好处就是: 能精确的限制返回值的具体类型

3. New 作用是什么?

  1. 向计算机(堆区)申请内存空间;
  2. 给实例变量初始化;
  3. 返回所申请空间的首地址;

4.OC实例变量的修饰符? 及作用范围?

@puplic 

 1.可以在其他类中访问被@public修饰的成员变量
 2.也可以在本类中访问被@public修饰的成员变量
 3.可以在子类中访问父类中被@public修饰的成员变量
 @private
1.不可可以在其他类中访问被@private修饰的成员变量
2.也可以在本类中访问被@private修饰的成员变量
3.不可以在子类中访问父类中被@private修饰的成员变量

@protected (默认情况下所有的实例变量都是protected)
1.不可可以在其他类中访问被@protected修饰的成员变量
2.也可以在本类中访问被@protected修饰的成员变量
3.可以在子类中访问父类中被@protected修饰的成员变量
 @package
介于public和private之间的,如果是在其他包中访问就是private,在当前代码中访问就是public.

5. @proprety的作用

@property = ivar + getter + setter
  1. 在.h文件中帮我们自动生成getset方法声明
  2. 在.m文件中帮我们生成私有的实例变量(前提是没有在.h文件中没有手动生成)
  3. 在.m文件中帮我们是实现get和set方法的实现
  • 注意:
    在使用@property情况下,可以重写getter和setter方法.需要注意的是, 当把setter和getter方法都实现了之后,实例变量也需要手动添加
 

 
posted @ 2022-06-23 13:03  心泪无恒  阅读(24)  评论(0编辑  收藏  举报