runloop和runtime总结

2024-08-23  本文已影响0人  师景福

1.runloop   作用:保持程序线程的持续运行;接受用户的交互,从而处理app的事件(事件响应,更新UI,识别手势,定时器,网络请求等),具有调用解耦(串行队列中进行一步操作回到主线程如下图)的作用,减少cpu的消耗,提高性能,用时运行不用就歇息。

runloop针对线程一对一,每个线程对应一个runloop,我们不能创建runloop,都是系统创建好的runloop,项目中主线程的对应runloop是默认开启的,其余的需要我们进行创建线程而开启;也会根据线程结束runloop也销毁

runtime  Runtime简称运行时,OC就是运行时机制,对于我们oc来说就是底层中我们对于某个object对应的函数,根据函数名称进行的调用;

作用:消息发送机制就是objc_msgSend,objc_msgSend(object, @selector(xxx));

             交换方法 我们项目中UIViewController +xxx 对于viewDidLoad等交换

    Method fromMethod = class_getInstanceMethod([self class], @selector(viewDidLoad));

    Method toMethod = class_getInstanceMethod([self class], @selector(xxxViewDidLoad));

   if (!class_addMethod([self class], @selector(xxxViewDidLoad), method_getImplementation(toMethod), method_getTypeEncoding(toMethod))) {

        method_exchangeImplementations(fromMethod, toMethod);

    }

动态添加方法  初始化调用一个类,添加一个方法performSelector,在类中我们进行resolveInstanceMethod方法( resolveInstanceMethod作用:就知道哪些方法没有实现,从而动态添加方法)

给分类添加属性  例如初始化 xxx =[[xxx alloc]init]; xxx.name =@'';

字典转model:遍历模型中所有的属性,根据模型的属性名,去字典中查找key,取出对应的值,给模型的属性赋值。

2.xcode 和测试工具

自带的leaks测试内存泄露(一般的 self未弱引用(block)、循环引用、定时器视频)(我们测试我们页面的dealloc走没走,通知,移除部分注册的web,定时器视频关闭等)

自带的crashes进行判断崩溃的地方Window -> Organizer进行查看

三方sdk例如Bugsnag、友盟、bugly测试数据崩溃的数据日志记录流

3、自定义控件

进行基础控件的拓展,并且自定义对应app全局共用的特殊控件

4.网络通信机制、socket通信、tcp/Ip 和http

Socket:是一个数据传输的连接线;

UDP:面向非连接的协议,传送数据不需要和服务器连接;只需要ip和监听端口,把数据传给网络就           可以。

TCP:三次握手,

众所周知,TCP在数据传输前需要经过三次握手,UDP却不需要做任何的准备即可进行数据传输,因此UDP不会引入建立连接的时延。

这也是DNS运行在UDP而不是TCP上的主要原因。

而HTTP协议之所以使用TCP,是因为对于HTTP协议来说,可靠性是至关重要的。

5.im即时通许和直播软件、语音软件

上一篇下一篇

猜你喜欢

热点阅读