- 博客(34)
- 收藏
- 关注
原创 计算机网络(四)传输层(TCP/UDP)
TCP和UDP 对比TCP(Transmission Control Protocol),传输控制协议UDP(User Datagram Protocol),用户数据报协议UDP协议UDP是无连接的,减少了建立和释放连接的开销UDP尽最大能力交付,不保证可靠交付不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)UDP长度(Length) ,占16位,首部的长度 + 数据的长度检验和:计算内容:伪首部 + 首部 + 数据伪首部:仅在计算检验和时起作用,并
2021-09-25 15:59:13 259
原创 计算机网络(三)网络层
概念网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据从源端经过若干个中间节点传送到目标端,向运输层提供端到端的数据传送服务。网络层向上只提供简单灵活的、无连接的,尽最大努力交付的数据包服务。网络层数据包(IP数据包,Packet)由首部、数据2部分组成数据,很多时候是由传输层传递下来的数据段(Segment)网络层的IP协议配套使用的还有三个协议1) 地址解析协议 ARP (Address
2021-09-22 22:08:39 569
原创 计算机网络(二)数据链路层
概念在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输 ,不同类型的数据链路,所用的通信协议可能是不同的数据链路层把网络层交下来的数据(网络层的PDU是IP数据报或叫分组,包)构成帧发送到链路上,以及把接受到的帧中的数据取出来并上交给网络层广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)点对点信道:PPP协议(比如2个路由器之间的信道)数据链路层需要解决三个基本问题:封装成帧透明传输差错检验封装成帧封装成帧 (framing) 就是在一段数据的前后分别添
2021-09-21 22:30:49 796
原创 计算机网络(一)基本概念
几个高频词的理解1.什么是IP地址?IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。2.什么是MAC地址?...
2021-09-07 21:55:40 181
原创 iOS app启动优化
318:cup和GPUcpu主要是用来各种计算,解码,GPU主要是通过计算好的数据进行屏幕渲染,也就是屏幕上显示的所用东西,都是通过GPU渲染出来的。渲染后,将其放到帧缓存区中,iOS 的帧缓存区是双缓冲机制,有前针缓存,后针缓存。319:image的处理,对于【uiimage imagewithname:】方法起时有一步隐藏的炒作,就是对image二进制数据进行解码操作,然后在现实到屏幕上321:离屏渲染圆角的设计,可以使用coreGraphics绘制裁剪圆角。322:卡顿监控323
2021-09-06 15:27:19 291
原创 单例的销毁
单例的代码实现 static Person *ple ; static dispatch_once_t predicate; dispatch_once(&predicate, ^{ NSLog(@"2:%ld", predicate); ple = [[Person alloc] init]; }); 单例的底层实现原理void dispatch_once(dispatch_once_t *val, dispa
2021-09-02 16:55:43 426
原创 iOS block 的本质
155:block 本质是一个oc对象,封装了函数调用。构造函数类似于oc的init方法,返回结构体对象。156:block的定义,其实相当于调用了一个构造函数,将对应定义的函数地址以及对应结构体的大小当作参数传给构造函数,构造完成后,将对应的对象地址,赋值给block 变量。在结构体中当,我们可以把结构体强制转化成为第一个成员变量,因为结构体指针的起始地址即为第一个成员的地址,因此可以强制转化。通过内存平移也能取到第一个成员结构体中的数据157:block会有一个变量捕获机制。(捕获即新增一
2021-09-02 16:13:11 201
原创 iOS 锁的底层原理
@synchronized(互斥锁) 原理1.clang分析实现原理 { objc_sync_enter(_sync_obj); try { // 结构体 struct _SYNC_EXIT { // 构造函数 _SYNC_EXIT(id arg) : sync_exit(arg) {} // 析构函数 ~_SYNC_EXIT(
2021-08-29 20:16:40 255
原创 iOS 函数响应式与中介模式自定义KVO
函数响应式流程:中介者模式流程分析:1.VC要做的是当model的值发生改变时调用对应的api。2.派生出一个类,即KVOC ,类是于中介一样,他只负责整合资源,在合适的时间告诉VC可以进行交易,即调用api。3.单利类似于买家,通过对数据的处理,以及观察将相应的结果相应应给VC,这里的单利获取VC是通过KVOC,类似当价格谈好,向原房主(VC)要钥匙。4.当交易达成后,各方以VC为结束所有交易为开始,逐步释放所有占用内存。demo...
2021-08-28 10:51:04 626
原创 GCD特殊函数使用
栅栏函数的使用注意事项:1.只针对于自己创建的并发队列起,如网络请求本身就在别的队列中在放到当前队列中,栅栏函数不起效。2.如果用的是串行队列栅栏函数的作用等同于一个同步函数的作用,系统全局并发队列并不起效。同步栅栏函数dispatch_barrier_sync(在主线程中执行):必须等到栅栏之前的任务执行完毕,才执行栅栏中的任务,并且会堵塞栅栏下面的任务。异步栅栏函数dispatch_barrier_async:前面的任务执行完毕才会来到这里- (void)demo2{ di
2021-08-13 11:11:02 204
原创 iOS GCD使用与分析
概念GCD全称是Grand Central Dispatch纯C语言,提供例如非常强大的函数GCD优势GCD是苹果公司为多核的并行运算提出的解决方案GCD会自动利用更多的CPU内核(比如双核、四核)GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码GCD核心 dispatch_async( dispatch_queue_create("com.CJL.Queue", NULL), ^{NSLog(@"GCD基本
2021-08-06 16:24:36 252
原创 iOS KVO探索
概念KVO,全称为Key-Value observing,中文名为键值观察,KVO是一种机制,它允许将其他对象的指定属性的更改通知给对象。基本用法KVO的基本使用主要分为3步:【一】注册观察者addObserver:forKeyPath:options:context[self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];【二】实现KVO回调obser
2021-07-27 15:46:29 217
原创 iOS底层KVC原理
概念KVC的全称是Key-Value Coding,翻译成中文是 键值编码,键值编码是由NSKeyValueCoding非正式协议启用的一种机制,对象采用该协议来间接访问其属性。既可以通过一个字符串key来访问某个属性。这种间接访问机制补充了实例变量及其相关的访问器方法所提供的直接访问。KVC 相关API常用通过key 设值/取值通过keyPath (即路由)设值/取值其他//默认返回YES,表示如果没有找到Set<Key>方法的话,会按照_key,_iskey,key,isk
2021-07-26 14:47:22 273
原创 iOS 底层面试题
一,Runtime是什么?runtime是由C和C++汇编实现的一套API,为OC语言加入了 面向对象、以及运行时的功能运行时是指将数据类型的确定由编译时 推迟到了 运行时举例:extension 和 category 的区别平时编写的OC代码,在程序运行的过程中,其实最终会转换成runtime的C语言代码, runtime是OC的幕后工作者1、category 类别、分类专门用来给类添加新的方法不能给类添加成员属性注意:其实可以通过runtime 给分类添加属性,即属性关联,重写sette
2021-07-25 17:26:25 301
原创 iOS组件化之通过CocoaPods发布
新建壳工程1.随便建立一个简单的工程,2.打开当前的工程的目录文件,新建一个文件夹 Lib3.cd到当前的Lib文件夹下执行:pod lib create MZSNetworking这里的MZSNetworking即为我们此次要做的组件。按照上面的操作步骤,当显示如上图即成功。4.打开Lib文件夹将看到下面的文件结构。这里的Example是自动生成的一个demo。我们要创建的组件,将放到上图选中的文件夹中,将对应的ReplaceMe.m删除即可到此我们的本地的组件库创建完成。发
2021-07-20 10:49:35 206
原创 类的加载(上)
类的加载_objc_init 函数void _objc_init(void){ static bool initialized = false; if (initialized) return; initialized = true; // fixme defer initialization until an objc-using image is found? environ_init(); tls_init(); static_i
2021-07-15 23:07:10 117
原创 消息转发流程
消息转发流程forwardingTargetForSelector 快速转发- (id)forwardingTargetForSelector:(SEL)aSelector{ NSLog(@"%s - %@",__func__,NSStringFromSelector(aSelector)); return [Good new];}解析当对象goodOne中没有对应的方法实现,可以通过上面这个方法进行重定向,找一个对象顶替goodOne去实现对应调用的方法。方法名称要保持一致
2021-07-10 23:04:05 225
原创 消息转发流程(上)
消息转发流程(上)补充void callInitialize(Class cls){ ((void(*)(Class, SEL))objc_msgSend)(cls, @selector(initialize)); asm("");}系统会制动把我们所有的initialize方法自动调用,还有load方法,c++的构造函数。分析一个崩溃场景Terminating app due to uncaught exception 'NSInvalidArgumentException
2021-07-06 15:32:12 151
原创 消息的慢速查找流程
消息的慢速查找流程lookUpImpOrForward 慢速查找核心函数在cache内查找bucket_t的过程中,如果查找了所有的缓存也无法命中的时候,接下来就要进入消息的慢速查找流程了,也就是由汇编查找 -> C/C++代码查找。为什么缓冲以汇编的形式来查找?1.这个流程更加接近机器语言执行快,更快的让对象找到方法。2.可变参数未知,和c语言(比较明确的参数类型)的特性有冲突,而汇编更加动态化。NEVER_INLINEIMP lookUpImpOrForward(id inst,
2021-07-05 21:15:45 146
原创 ios底层探索消息发送 cache 查找(下)
ios底层探索消息发送 cache 查找(下)通过sel从缓存中找到对应的 imp//NORMAL, _objc_msgSend, __objc_msgSend_uncached.macro CacheLookup Mode, Function, MissLabelDynamic, MissLabelConstant // requirements: // //缓存不存在返回NULL,x0设置为0 // GETIMP: // The cache-mi
2021-06-28 15:15:18 156
原创 iOS底层开发消息发送与转发流程
iOS底层开发消息转发流程一,cache缓存读取流程分析首先我们上一章已经了解到对应的cache_t的数据结构_bucketsAndMaybeMask:指针类型,存放buckets的首地址_maybeMask:当前的缓存区count_flags:同_occupied_occupied:当前cache的可存储的buckets数量,默认是0_originalPreoptCache:初始时候的缓存(注意联合体互斥)下面我们主要分析这些成员变量的主要作用。首先我们要了解到一点这里buckets的存
2021-06-27 22:14:19 205
原创 iOS底层原理类探索之cache分析
iOS底层原理类探索之cache分析struct objc_class : objc_object { // Class ISA; Class superclass; cache_t cache; // formerly cache pointer and vtable class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags上一章我们探索了关于bits中的存储信息
2021-06-26 23:02:53 160
原创 isKindOfClass VS isMemberOfClass
iOS isKindOfClass VS isMemberOfClass BOOL re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]]; // BOOL re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]]; // BOOL re3 = [(id)[Good class] isKindOfClass:[Good class]];
2021-06-22 14:35:38 77
原创 iOS 属性之 strong和copy修饰的区别
iOS 属性之 strong和copy修饰的区别 //1.当生成一个不可变字符串,通过下划线进行赋值。 NSString *textString =[NSString stringWithFormat:@"初始化字符串"]; _strongtitle=textString; _ccopytitle=textString; NSLog(@"//1.当生成一个不可变字符串,通过下划线进行赋值。"); NSLog(@"textString: %p , %p , %
2021-06-21 17:28:03 804
原创 iOS底层原理之类,元类数据结构探索(下)
iOS底层原理探索(五)类,元类,根元类—(下)一,类中firstSubclass探索(lldb) p/x GoodOne.class(Class) $0 = 0x0000000100008398 GoodOne(lldb) p/x 0x0000000100008398 + 0x20(long) $1 = 0x00000001000083b8(lldb) p (class_data_bits_t*)0x00000001000083b8(class_data_bits_t *) $2 = 0x0
2021-06-21 00:21:20 447
原创 iOS底层原理之类,元类,根元类探索(上)
iOS底层探究(四)类,元类,根元类一,通过地址探索isa中用来储存类信息的空间 // 0x00007ffffffffff8 对应的掩码,用来取出isa中关于类信息。 //生成一个简单的对象。 GoodOne *p = [GoodOne alloc]; NSLog(@"%@",p);(lldb) x/4gx p0x103864410: 0x011d800100008365 0x00000000000000000x103864420:
2021-06-17 22:53:04 984
原创 iOS-LLDB 常用命令梳理(一)
iOS-LLDB 常用命令梳理(一)1.p命令 :打印当前输出者的类型与对应的内存地址。$0 :xcode缓存中的局部变量(lldb) p self(ViewController *) $0 = 0x0000000122a067202.p命令 :特殊用法可以进行 进制转化(lldb) p 10 转十进制(int) $2 = 10(lldb) p/x 10 转十六进制(int) $3 = 0x0000000a(lldb) p/o 10 转八进制(int) $4 = 012(lldb)
2021-06-15 17:59:26 649 1
原创 iOS底层原理之alloc探究(三)对象本质与神秘的isa
2.1 代码与现象创建一个LGPerson类,就一个name属性。@interface LGPerson : NSObject@property (nonatomic, copy) NSString *name;@enddfds dsfaf文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以
2021-06-13 23:49:20 1312 3
原创 iOS 底层原理之alloc探究(二)
ios 底层原理之alloc探究(二)上一章节我们通过汇编跑流程找到 alloc 底层的核心方法 _class_createInstanceFromZone 本章主要研究当对象申请内存时到底如何去计算。准备工作1.了解基本数据类型占用字节数2.了解LLDB 指令数据的存储规律内存对⻬的原则1:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子
2021-06-09 00:41:50 199 2
原创 iOS 底层原理之alloc探究(一)
**iOS 底层原理之alloc 探究(一)结论先行:当初始一个对象[[Goods alloc] init] ,其中alloc方法主要通过_class_createInstanceFromZone 方法 做三件事 :1.instanceSize (计算需要申请的内存大小)2.calloc (向系统申请开辟内存,返回地址指针)3.initInstanceIsa (通过isa 绑定相应的类)说白了,就好比你是厂长,你告诉仓库管理员现在有一批货物要入库。管理员首先看看这批货物有多少要多大的房间,
2021-06-06 23:24:16 210
原创 iOS 直播类,交友类,陪玩类 app 上架攻略
直播,交友,陪玩类app 上架攻略项目起于2020年3月,当时只是做啦一个简版就两条线,用户的可以通过游戏技能申请大神,然后发布技能,线上接单,这是一条订单系统,另一条线是可以发布动态。简版也被拒绝啦两次,主要原因是发布动态这一块。要点:发布动态必须加入举报,拉黑功能。2020年6月开始上架直播语音室,噩梦就从这里开始。上架前的准备:1.音视频类app 上架资质。苹果官方给的所需证件是— Provide both a copy and the direct link to the govern
2020-08-25 14:32:25 1467
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人