最近看了一些面试的题, 发现这里面真的有好多自己没接触过的东西, 自己做了笔记顺便和大家分享一下:
本文将持续更新
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. 线程和进程的区别?
一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间
要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务
一个进程中允许开启多条线程,也就是同时执行多个任务
今天就暂时写这么多, 本文全是小编一个一个字敲出来的, 后续还会继续更新, 希望本文能对大家起到帮助 !!!