分类(类别、类目)
- 作用
- 在不修改原来类的基础上,扩充一些方法
- 一个庞大的类可以分模块开发
- 一个庞大的类可以由多人编写,利于团队合作
- 格式
- .h文件中声明
@interface ClassName(CategoryName) NewMethod; @end 1.ClassName : 原类名(要为哪个类扩展方法) 2.CategoryName :需要添加的类名 3.NewMethod : 需要添加的方法 4.不能定义变量
- .h文件中声明
- 注意事项:
- 只能增加方法,不能增加成员变量
- @property只会生成getter和setter方法,不会生成实现私有成员变量
- 分类可以访问原来类中的成员变量
- 如果出现分类和原类出现方法同名的情况,优先调用分类中的方法,原类中的方法会被忽略掉
- 分类的编译顺序:
- 多个分类中有同名方法,则执行最后编译的方法
- 方法调用的优先级:
- 分类(最后编译的的方法优先)
- 原类
- 父类
- 类扩展:
- 没有分类名称的分类,可以被认为是匿名的分类。可以声明私有的方法和属性
Block:
Block简介:
Block是一种特殊的数据类型,在动画、多线程、网络请求回调中有着广泛的应用。可以保存一段代码,在合适的时候取出来,功能类似于函数和方法
-
Block格式:
- 大体格式:
返回值类型 (^block变量名)(形参列表) = ^(形参列表){};
- block最简单形式
void (^block名)() = ^{代码块;} 例如: void (^myBlock)() = ^{ NSLog(@"李南江"); };
- block带有参数的block的定义和使用
```objc
void (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }
例如:
void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
- 带有参数和返回值的block
返回类型 (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }
例如:
int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
- 调用Block保存的代码
block变量名(实参);
```
#### 运行时:
- 运行时简介:
- runtime即运行时,oc就是这种运行时机制,其中最主要的就是消息机制
- oc是一门动态编译语言,他在编译的时候并不能决定调用哪个函数,即使这个函数只有声明而没有实现也不会报错。而如果调用了没有实现的方法,c语言是会报错的。
- 主要的使用场景:
- 发送消息
- 方法调用的本质:让对象发送消息(只有对象才能发送消息)
- 交换方法(系统自带的方法功能不够,需要扩充方法,保持原有功能)
- 方法一:集成系统的类,重写方法
- 方法二:使用runtime,交换方法
- 动态添加方法
- 使用场景: 一个类的方法非常多,加载类到内存的时候需要给每个方法生成映射表,十分耗费资源,这时候可以采用动态的给每个类来添加方法
- 给分类添加属性
- 给一个类添加属性,本质是给这个类添加关联,公布时把这个值得内存空间添加到类的内存空间
- 字典转模型
- 简述app的完整启动过程
(有storyboard)
- 执行main函数
- 执行UIApplicationMain函数
- 创建UIAppliction对象,并设置UIApplication的代理
- 开启一个主运行循环,保证应用程序不退出
- 加载info.plist配置文件,判断info.plist文件当中有没有Main storyboard file base name,如果有就去加载info.plist中指定的文件,如果没有,则加载完毕
(没有storyboard)
- HTTP和TCP协议的区别:
- HTTP协议是构建在TCP协议基础之上的,运行在应用层,而TCP运行在传输层
- HTTP是无状态的短连接,规定了如何进行缓存以及请求的格式,而TCP是有状态的长连接,因此传递数据是安全的。
- HTTP可以处理从哪儿请求,如何请求;而TCP负责保证数据传输的安全性。
- 写一个标准的宏MIN,返回最小的数:
- \#define MIN(A,B) ((A) <= (B)? (A) : (B))
- 多线程的底层实现:
- 什么是多线程:在多线程开发中,一个程序对应一个进程,而一个进程至少对应一个线程,其中每个线程都可以执行不同的任务(UI刷新、触摸点击事件)也就是说线程是执行进程的最基本的单元。整个多线程基于mach来实现
- 应用的开发场景有c对应的pthread、oc对应的NSThread以及GCD和NSOpreation,最常见得是GCD和NSOpreation,其中NSOpreation和NSOpreationQueue又是GCD的封装。