Object Oriented Programming(面向对象编程) 这种思想把一切看为对象,把现实中的事物及关系抽象成对象,使咱们将处理现实中的实际问题简化为处理各类对象之间的问题面试
面向对象的三大特性sql
Q:NSString 为何用 copy 修饰?用 strong 会有问题么?编程
A:保证其安全性设计模式
由于若是用 strong 修饰,在进行 setter 时,传进来的是一个NSMutableString 也是能够赋值的(这里也有多态的体现),可是若是 NSMutableString 发生变化的话,因为是 strong 修饰, NSString 的那个对象也会发生变化且无感知,这种风险就存在了,而若是用 copy 修饰,在 setter 时,若是传进来的不可变对象 NSString,那么 copy 为浅拷贝,若是传进来的是可变对象 NSMutableString,那么 copy 为深拷贝且 copy 出来的这个新对象变为了避免可变的对象缓存
事件传递:当一个事件产生好比说一个点击事件,首先就要寻找最佳响应者,配合下面这两个方法,找到最佳响应者以后,UIApplication发送事件给UIWindow,UIWindow发送事件给最佳响应者安全
- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event; // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event; // default returns YES if point is in bounds 复制代码
响应链:若是最佳响应者能够处理这个事件,那就响应结束,若是不能响应事件则经过 nextResponder 传递给下一个响应者,若是传递到UIApplication仍是不能响应则丢弃该事件bash
当 FPS 低于 60 的时候,肉眼就会感到卡顿多线程
因此每一帧绘制的时间须要小于 1000ms / 60 ≈ 16.7ms 才不会感受到卡顿并发
系统生成图像信号是靠 CPU + GPU 共同工做的,因此优化的话也是从这两方面入手考虑异步
在block中使用外部变量时,block会捕获其变量,具体规则以下
使用场景:在blcok内部对捕获的值进行赋值
Objective-C 扩展了 C 语言,并加入了面向对象特性和消息传递机制,而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。
经过内部维护的事件循环来对事件、消息进行管理的一个对象 没有消息的时候休眠以免资源占用(用户态转为内核态),有消息时当即被唤醒(内核态转为用户态)
队列:负责任务的调度 线程:负责任务的执行
// OC 中涉及的队列
dispatch_queue_t _cocurrentQueue;
dispatch_queue_t _globalCocurrentQueue;
dispatch_queue_t _serialQueue;
dispatch_queue_t _mainQueue;
复制代码
串行队列
_serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
_mainQueue = dispatch_get_main_queue();
复制代码
并行队列
_cocurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
_globalCocurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
复制代码
系统提供的并行队列优先级
#define DISPATCH_QUEUE_PRIORITY_HIGH 2
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
复制代码
{
dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, global_queue, ^{
dispatch_sync(global_queue, ^{
sleep(5);
NSLog(@"1 %@",[NSThread currentThread]);
});
dispatch_sync(global_queue, ^{
sleep(3);
NSLog(@"2 %@",[NSThread currentThread]);
});
dispatch_sync(global_queue, ^{
sleep(1);
NSLog(@"3 %@",[NSThread currentThread]);
});
});
dispatch_group_async(group, global_queue, ^{
NSLog(@"4 %@",[NSThread currentThread]);
});
dispatch_group_async(group, global_queue, ^{
NSLog(@"5 %@",[NSThread currentThread]);
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"三个任务都执行完毕后执行");
});
}
复制代码
执行结果:
{
dispatch_sync(_globalCocurrentQueue, ^{
NSLog(@"登陆");
});
dispatch_async(_globalCocurrentQueue, ^{
NSLog(@"下载攻略");
});
dispatch_async(_globalCocurrentQueue, ^{
NSLog(@"下载音乐");
});
}
复制代码
安全的:不引发 server 端任何状态变化 幂等的:同一请求方法执行屡次与执行一次效果相同
空了继续更
在简书准备发布呢,系统提示须要到 9.28 才能发,忽然想到还有个好平台--掘金,就直接粘过来了😆