最近看了一些面试的题, 发现这里面真的有好多自己没接触过的东西, 自己做了笔记顺便和大家分享一下:
本文将持续更新
1. Objective-C所有对象间的交互是如何实现的?
主要有两种角色: 数据发送者 、 数据接收者.
正向传递:直接拿到接收者的指针.
反向传递:
- 委托模式:观察者模式(本质是单例)
-
Block语法,APPDelegate来实现
1.委托模式, Block语法 1 对 1
2.观察者模式:1 对 多
2. 什么是数据结构?
计算机存储, 组织数据的方式, 相互之间存在一种或多种特定关系的数据元素的集合.
3. #import" "和#include" "的区别, @class的意思, #import<>和#import" "的区别.
#import 是Objective-C 导入头文件的关键字
#include是C/C++导入头文件的关键字
@class 告诉编译器某个类的声明, 执行时才查看类的实现文件, 可以解决头文件的相互包含.
#import<> 引入的是系统库文件 (使用CocoaPods导入的三方库也是需要使用这种引入方式)
#import" " 引入的是用户自己定义的头文件
4. 对于语句NSString *str = [[NSData alloc] init], str在编译时和运行时分别是什么类型?
编译时: NSString 类型
运行时: NSData 类型
5. 常见 OC 数据类型有哪些? 和 c 区别?
Objective-C: NSString, NSInteger, NSArray, NSData...
C : 基本数据类型int
6. id 声明对象有什么特性
- 可以指向
任意类型的Objective-C对象 - 可以作为
返回值, 也可以声明对象
返回值使用 instancetype 与id的区别
-
instancetype只能作为返回值 -
id可以声明对象, 也可以作为返回值
7.
@property NSString *sex; //属性
属性拥有setter 和 getter 方法, 外加 _sex 成员变量
8. 深拷贝与浅拷贝的区别:(面试几乎必考的笔试题)
浅拷贝: 只复制指向对象的指针, 而不复制引用对象本身
深拷贝: 复制引用和对象本身
用网上一流行的小哥说的话:
浅拷贝: 你和你的影子, 你完蛋了, 你的影子也完蛋了.
深拷贝: 你和你的克隆人, 你完蛋了, 你的克隆人还好好的或者.
9. nil null Nil 区别:
nil 指向OC对象
Nil 指向OC 的类
null 一般在C语言中使用
10. 线程和进程的区别?
一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间
要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务
一个进程中允许开启多条线程,也就是同时执行多个任务
今天就暂时写这么多, 本文全是小编一个一个字敲出来的, 后续还会继续更新, 希望本文能对大家起到帮助 !!!