iOS
文章平均质量分 75
lingjunjie
这个作者很懒,什么都没留下…
展开
-
iOS的组件化
iOS的模块间组件化原创 2023-02-21 00:18:35 · 210 阅读 · 0 评论 -
APP重签名
APP重签名原创 2022-12-21 00:23:56 · 180 阅读 · 0 评论 -
iOS的启动优化
iOS启动优化原创 2022-12-20 17:02:15 · 627 阅读 · 0 评论 -
LLVM浅析
llvm浅析原创 2022-12-17 02:40:40 · 769 阅读 · 0 评论 -
block探索下
block原创 2022-12-16 15:08:27 · 419 阅读 · 0 评论 -
block 归纳总结 上
block有三种类型:堆block,栈block,全局block。对于这三种类型的block遵循俩个原则:block如果没有使⽤外部变量,或者只使⽤静态变量和全局变量,那⼀定是全局blcok。block如果使⽤了外部变量,⽽且不是静态变量或全局变量,如果赋值给强引⽤的是堆block,如果赋值给弱引⽤的是栈blcok。因为block在创建的时候,它的内存是分配在栈上的,⽽不是在堆上。栈区的特点是:对象随时有可能被销毁,⼀旦被销毁,在调⽤的时候,就会造成系统的崩溃。所以我们要使⽤copy把它拷⻉到堆原创 2022-06-25 15:50:48 · 724 阅读 · 0 评论 -
iOS_线程锁的种类以及使用
线程锁原创 2022-06-20 16:15:18 · 663 阅读 · 0 评论 -
GCD的Group,信号量,栅栏函数,source,单例的使用
如果“v == DLOCK_ONCE_DONE”执行return,如果dispatch_once还没被调用,返回_dispatch_once_callout,如果当前的任务在执行中就会调用_dispatch_once_wait栅栏函数dispatch_barrier_async 能够在同步队列中先执行完barrier之前的然后是barrier,再来barrier以后的任务。用例:Group主要调用到接口就是dispatch_group_create 创建group ,dispatch_gro原创 2022-06-14 00:08:33 · 238 阅读 · 0 评论 -
多线程底层探索下
当代码运行到这里时线程会死锁,接下来从源码观察通过汇编看到运行以后会来到这个方法__DISPATCH_WAIT_FOR_QUEUE__,然后打开源码然后再进一步看看_dq_state_drain_locked_by源码直接返回了_dispatch_lock_is_locked_by,参数是线程的id继续查看查看DLOCK_OWNER_MASK宏定义为:#define DLOCK_OWNER_MASK ((dispatch_lock)0xfffffffc)知道DLOCK_OWNER_MASK是原创 2022-06-12 18:24:46 · 121 阅读 · 0 评论 -
多线程-GCD 探索上
线程和进程的定义线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。进程想要执行任务,必须得有线程,进程至少要有一条线程。程序启动会默认开启一条线程这条线程被称为主线程或UI线程。进程是指系统中正在运行的一个程序每个进程之间都是独立的。每个进程均运行在其专用的受保护的内存空间内-通过mac的活动监视器可以查看所有开启的进程.........原创 2022-06-01 21:52:57 · 109 阅读 · 0 评论 -
分类的加载流程
非懒加载类的加载流程首先非懒加载的类 会走到一个 realizeClassWithoutSwift 的方法里面,给rw创建空间分配好内存数据以后,就会设置父类元类最后就是处理分类下面就是methodizeclass方法的源码static void methodizeClass(Class cls, Class previously){ runtimeLock.assertLocked(); bool isMeta = cls->isMetaClass(); aut原创 2022-05-31 08:58:16 · 242 阅读 · 0 评论 -
应用加载流程,dyld的工作过程
应用加载流程mach-o文件首先mach-o是一种文件格式,是可执行的目标文件。包括静态库和动态库,dyld(动态链接器,用于动态链接)都是mach-o,那么在生成这些文件之前,系统需要先通过预编译mach-o: 可执行文件、dylib、bundle ,这三种类型文件都是mach-o的格式预编译:将源代码当中以#开头的例如import、incloud,包含的文件插入到指定位置;替换我们编辑的宏定义还有删除我们在代码过程中编写的注释。结束以后就进入了编译的阶段;编译 :这个阶段呢就会进行代码的词法分原创 2022-05-16 15:38:57 · 240 阅读 · 0 评论 -
方法的底层原理
方法的底层原理方法的快速查找流程objc_msgSend(receiver,sel…)判断 receiver是否存在receiver - isa -classclass --内存平移 --cachecache – bucketsbuckets – 对于selbuckets – 对于selbuckets 有对应的sel – cacheHit - 调用impbuckets 没有对应的sel – _objec_msgSend_uncached类方法?方法的慢查找lookUpImpFo原创 2022-05-06 22:19:42 · 781 阅读 · 0 评论 -
类的cache底层原理
关联对象objc_class中的 cache_t cache 探究通过源码断点:x/6gx p.class ISA 8字节superclass 8字节所以首字节平移16字节后就是cache的首字节地址,0x100008100 ,然后对其强转成功输出可得:在源码中可以看到cache的结构体是这样的void insert(SEL sel,IMP imp,id receiver)然后查看方法区就可以看到insert方法 ,.既然主体是cache 那么就来看看insert方法里面的逻辑:_原创 2022-04-28 02:44:46 · 88 阅读 · 0 评论 -
类的底层原理02
类的底层原理02内存优化中,xcode 不会对成员变量重新排序,只会对熟悉进行重排,而且重排属性过程中只会考虑到当前类,不会去重排父类。类中的成员变量就是储存在 const class_ro_t *ro 的结构体中,通过在源码中,对类的探究可以证明这点。那么为什么成员变量储存在类中·,具体的值储存在实例对象中呢?因为类的本质其实是 结构体 ,相当于模板 。模板里面就有我们的成员变量 ,方法,协议 等内容,对象就是根据我们类的模板生成的,然后我们就可以根据实际中不同的对象去保存不同的值。在类的结构中存原创 2022-04-26 09:14:37 · 145 阅读 · 0 评论 -
类的底层原理01
类的底层结构类的isa指针指向类和元类继承之间的关系`类的isa指针指向通过输出类对象的三种生成方式,的类对象isa指向的地址发现指向同一块内存。所以得出结论我们的类对象只有一个在上一个篇章我们说过 实例对象 包含的了isa 和 相关属性, 从源码截图得知 类本质是一个继承自object_object的object_class结构体,也有一个isa指针。如果说实例对象的isa指针指向它的类对象,那类对象的isa指针指向元类对象。M1 芯片的是armIntel的是x86通过输出实例对象p.原创 2022-04-23 01:01:21 · 176 阅读 · 0 评论 -
iOS底层探索02-对象的底层探索
对象底层探索影响对象内存的因素对象内存的分布联合体、位域nonPointerisa如何利用isa的位域运算得到类对象new 方法影响对象内存的因素首先介绍打印指令p 和 pop是LGPerson的一个对象,通过截图可以看出不一样想打印10进制的是 p/x ,8进制的是p/o2进制的是p/t打印浮点的是p/f然后介绍一个x指令,它能打印出对象地址其中x/4gx :以16进制单位去打印后面的对象的4个8字节地址x/6gx:以16进制单位去打印后面的对象的6个8字节地址然后原创 2022-04-20 21:47:04 · 241 阅读 · 0 评论 -
iOS 底层探索alloc的原理01
运行场景,新建一个项目工程(我命名为zzz) ,创建一个新的类JSPerson,然后在view controller里面执行 代码:JSPerson * p = [JSPerson alloc]; 打上断点。新建一个项目工程(我命名为zzz)创建一个新的类JSPerson在苹果的开源网站(https://opensource.apple.com/tarballs/)去download对应的源码。这边我们看的是alloc 所以找objc4-838.在源码的main方法写上代码用来观察,alloc方法原创 2022-04-18 22:13:38 · 254 阅读 · 0 评论 -
YYMemoryCache浅析
YYMemoryCache 的底层浅析YYMemoryCache是内存缓存,主要用到两种数据结构的LRU淘汰算法。两种数据结构分别为 :哈希表、双向链表LRU淘汰算法:缓存淘汰算法,遵循先入先出原则,通过自定义缓存个数,超出缓存个数以后把不常用的缓存移出队列。源码片段:_YYLinkedMapNode: 双向指针结点_prev: 头指针_next: 尾指针_key :缓存的key_value:缓存的对象_cost:开销_time:记录缓存的时间戳dic:哈希表_head原创 2022-03-04 00:59:41 · 315 阅读 · 0 评论 -
UITableviewHederView的偏移 以及 遮挡cell的问题记录
UITableviewHederView的偏移 动态设置高度 以及 遮挡cell的问题记录如题最近公司的项目,在iOS系统11.4.1的时候首页使用tableview来做开发,然后出现了三个问题,1、tableview.tableHeaderview 配置以后,高度不正确 2、xy轴偏移 3、遮挡tableviewcell。下面我们一个个来处理首先介绍一下首页实现方案,headerview通过通过断点得知。在设置了frame值以后headerview又发生了XY轴的偏移值。解决方案给head原创 2020-09-08 10:21:49 · 506 阅读 · 0 评论 -
在OC项目中引入Swift
在OC项目中引入swift首先在工程文件里面创建一个.swift文件,如果你之前没有创建过这时候会提示你创建一个桥接文件;kywy-Bridging-Header.h备注:有的孩纸会没有提示,创建这个文件的。避免打乱节奏我在文章最后再补充找到工程文件下的TARGETS-Build settings 中搜索 Defines Module 设置为YES同样找到工程文件下的TARGETS-Build settings 中搜索Product mo 设置为工程名,这时工程会自动创建一个项目名-Sw原创 2020-07-07 09:47:18 · 1805 阅读 · 0 评论 -
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use
iTunesConnect吃包 因为ipa包中包含uiwebview5月1号以后iTunesConnect不允许上传的ipa包中屌用UIWebView,使用过后上传的ipa包都不会显示在活动里(我称呼这种骚操作为‘吃包’)。已经把项目工程里面的有关uiwebview的文件都处理好了,重新上传结果还是不行。在网上看到一个方法能够反编译我们的ipa包,然后查询ipa中屌用的头文件,这样就可以知道问题出现在哪里了。首先download一个class-dump : 下载地址:http://stevenyga原创 2020-05-11 09:40:47 · 12622 阅读 · 7 评论