- 博客(28)
- 资源 (18)
- 问答 (1)
- 收藏
- 关注
原创 iOS之KVC和KVO底层探索
NSObject运行打印:根据KVC 1.步骤,按照顺序查找。由于我们重写了set方法,所以没有给_name赋值。所以打印(null).查看打印:根据KVC 2.步骤理论,会优先给_< key >赋值。所以只打印了 _name = NY根据KVC 3.步骤理论运行,查看打印: 发现控制打印报错。没有找到对应的key值。KVC取值步骤:(1-0)在实例中搜索找到的名称为get< key >,< key >,按此顺序是< key >或_< key >的第一个访问器方法。
2023-02-02 09:56:38
472
原创 iOS编译过程之LLVM
传统编译器:1.编译器前端(Frontend):它解析源代码,进行词法分析,语法分析,语义分析,检查源码是否错误,然后构建抽象语法树(Abstract Syntax Tree,AST),LLVM的前端还会生成中间代码2.优化器(Optimizer):优化器负责进行各种优化。改善代码的运行时间,列如消除冗余计算等。3.后端(Backend)/代码生成器(CodeGenerator):将代码映射到目标指令集。生成机器语言,并且进行机器相关的代码优化。...
2022-08-11 15:50:47
385
转载 iOS框架-之入门篇
在日常开发中,经常讨论什么样的框架能。感觉什么都知道,但做起来又好像什么都不知道。各种大佬又有各种的流派,框架这种东西还是得自己理解并且贯通。就如同武功秘籍,必须打通"任通二脉"才能突破到更高一层一样。各位程序猿,也是以这个目标进行自我修行提高。(PS:本文只针对自己的理解加以记录)顾名思义,MVC包括三个模块:(模型层)、(视图层)、(控制层)。与用户的交互顺序是:用户通过视图层发送请求(例如查询账户信息request),视图层的请求发送到控制层,控制层进行中转后,通过模型层与数据库交互查询。模型层的查询
2022-07-28 20:38:38
556
原创 block底层探索
1.block的本质block的本质是⼀个类型的结构体。copy和dispose函数是⽤来对block内部的对象进⾏内存管理的,block拷⻉到堆上会调⽤copy函数,在block从堆上释放的时候会调⽤dispose函数。2.block的底层原理⽤__block修饰的变量在编译过后会变成__Block_byref__XXX类型的结构体,在结构体内部有⼀个__forwarding的结构体指针,指向结构体本身。__block修饰对象的__forwarding指针指向堆上的拷⻉之后的对象。...
2022-07-28 20:36:16
425
原创 iOS界面卡顿原理及优化
在日常开发中,我们最多遇到的就是UI绘制,内容展示等需求的开发,APP的UI展示是否流畅,也是用户最直接的感受。今天就针对UI界面卡顿原理进行分析,如何优化进行讨论。
2022-07-13 22:27:01
2158
原创 iOS-线程锁
在程序开发过程中,经常使用到线程,多线程操作数据时。难免发生一些不可控的情况,造成数据不安全。这个时候我们就用了锁,常用的锁有哪些?有os_unfair_lock、NSLock、NSCondition、NSRecursiveLock等。...
2022-06-15 17:40:24
954
1
转载 iOS类的底层探索(下)
前面我们已经学习了对象相关内容, 如元类,根元类,以及superclass的结构与关系等;初步分析了类的结构superclass,cache,class_data_bits_t,class_data_bits_t结构体中提供了data()方法,用于获取class_rw_t,class_rw_t是在类初始化过程中已经被创建了,并且class_rw_t的相关数据来自MachO文件中ro数据!简单总结:对象是类的实例,类是元类的实例,方法都存储在各自的类中。...
2022-06-15 17:29:52
275
转载 iOS类的底层探索(上)
前面我们已经学习了对象相关内容,如alloc的流程,对象的内存分配,以及对象ISA的初始化等;明确了OC层NSObject,与c\c++层中objc_object的对等关系;Class的定义为objc_class *类型。接下来,深入探索类的结构。一. isa指针分析在对象的初始化过程中,学习了对象isa的初始化,并且isa中的shiftcls指向了对象所对应的类。通过以下案例我们可以再次验证这一点,即对象内存结构的前八个字节是对象的isa,并且指向了p对象的类LGPeron。见下图:.
2022-05-20 10:08:45
211
原创 ios对象的底层探索(下)
我们在上一篇文章中已经初步了解了,alloc是如何分配内存等,结构体按最内存对齐,oc类是16字节对齐等内容。 影响对象内存的因素 对象⾥⾯存储了⼀个isa指针 + 成员变量的值,isa指针是固定的,占8个字节,所以影响对象内存的只有成员变量(属性会⾃动⽣成带下划线的成员变量)我们验证看到,对象P并未赋值。但是p的内存占用了48字节(8+8+4+8+2+1=31 按8对齐40+isa8)。 对象的内存分布 在对象的内部是以8字节进⾏对⻬的。 苹果会⾃动重成员变量的顺序
2022-05-20 09:41:21
144
原创 ios对象的底层探索(上)
常用指令 1. po: 为 print object 的缩写,显示对象的文本描述2. bt: 打印函数的堆栈 3. register read 读取寄存器4. x/nuf n表示要显示的内存单元的个数 u表示一个地址单元的长度: 取值范围: b 单字节 h 表示双字节 w 表示四字节 g 表示八字节 f表示显示方式: 取值范围: ..
2022-04-17 01:14:53
157
原创 计算机学习笔录
1.二进制算法:35 = 100011 (2)具体步骤:35 / 2 =17======= 余117 / 2 = 8======= 余108 / 2 = 4======= 余004 / 2 = 1======= 余002 / 2 = 1======= 余0...
2022-03-29 14:28:09
325
原创 Hook初探索
分析MachO获取函数地址⾸先我们要⽤到⼀款软件。MachOView利⽤它来分析我们Demo的主程序。接下来如何定位到我们的sum函数地址呢? 通过LLDB调试获取Sum函数的⽂件偏移地址。1.⾸先在sum函数上下⼀个断点 2.然后通过汇编显示确定函数地址,在Xcode⾃带的Debug设置中设置⼀下搞定 Debug --> Debug Workflow --> Always Show Disassembly(⼀直显示汇编)3.接下来通过LLDB指令找出主程序的.
2022-01-24 17:44:29
411
原创 Mach-0符号表
ABI Mach-OMach-O(Mach Object) 是MacOS、iOS,iPadOS存储程序和库的文件格式。对应系统通过应用二进制接口(application binary interface,缩写ABI)来运行改格式的文件。Mach-O格式用来替代BSD系统的a.out格式。Mach-O文件格式保存了在编译过程和链接过程中产生机器代码和数据。从而为静态链接和动态链接的代码提供了单一文件格式。段之前始终是4096字节或者4KB的倍数,其中4096字节是最小大小。现在短是16
2022-01-20 16:27:25
3020
原创 寄存器常见指令
mov: 将某一寄存器的值复制到另一寄存器(只能用于寄存器与寄存器或者寄存器 与常量之间传值,不能用于内存地址),如:mov x1, x0 将寄存器 x0 的值复制到寄存器 x1 中add: 将某一寄存器的值和另一寄存器的值 相加 并将结果保存在另一寄存器中, 如:sub: 将某一寄存器的值和另一寄存器的值 相减 并将结果保存在另一寄存器中:and: 将某一寄存器的值和另一寄存器的值 按位与 并将结果保存到另一寄存器中, 如:orr: 将某一寄存器的值和另一
2022-01-19 17:12:18
3972
原创 记录podspec创建私有pod库流程,ios组件化管理。
最初是想整个组件化管理的案例,借鉴了一些文章:作者:SnaiLi地址:https://www.jianshu.com/p/ea09fa02e871 和作者:上海_光强 地址:https://www.jianshu.com/p/59c2d2c4b737 (不能白漂别人的成果)1、创建一个git仓库用来做内部私有库的Spec Repo,命名为Pods(自己喜欢怎么命名都可以),如下图:image.pngpods.git 用来管理控制 自己的组件.podspec 版本的注意:一定...
2021-02-23 16:52:55
973
1
转载 [iOS] iOS开发的22个奇葩技巧
转自:http://bbs.itcast.cn/thread-51807-1-1.html导读:TableView不显示没内容的Cell怎么办?键盘事件写得好烦躁,都想摔键盘了怎么办?App老不流畅哪出问题了?CoreData语法又臭又长怎么办?拉伸图片怎么才能不变形?让我们一起欢乐地学习一下iOS开发的各种小技巧吧。1. TableView不显示没内容的Cell怎么办?类似于
2015-12-08 14:43:21
643
转载 iOS的横屏(Landscape)与竖屏(Portrait)InterfaceOrientation
最近做一个页面,最初并没有太多考虑orientation的情况,当其嵌入到一个在iPad上使用横屏(Landscape)的应用中,就会只显示在屏幕的左面,而且貌似还没显示全,这个……很丑!发自内心地觉得这么做对不起苹果的设计理念!对不起乔老爷子。。。改!说到该就要了解苹果开发中对iOS应用的横屏(Landscape)和竖屏(Portrait)的支持情况。0. 应用级别的配置大家(特指有
2015-01-13 16:21:34
1027
原创 C# 数组之回溯法
很多数排列组合问题都可以用回溯法来解决,回溯相比上面方法的优点就是减少可行解搜索的范围,因为回溯一旦发现当前解不满足条件就会停止搜索,回溯并进入下一个分支进行搜索,比上面的方法快很多,这里使用的是回溯法中的子集树模型。对于数组中任意一个元素,先将其放入结果集中,如果当前和不超出给定和,那就继续考察下一个元素,如果超出给定和,则舍弃当前元素。如此往复,直到找到所有可行解。首先定义一个标志位数
2012-03-15 16:07:12
1414
原创 c#,.net 下载文件 设置断点
/// /// c#,.net 下载文件 /// /// 下载文件地址 /// 下载后的存放地址 /// 用于显示的进度条 /// public void DownloadFile(string URL, string filename, System.Windo
2012-03-07 17:31:21
2579
转载 ASP.NET MVC:自定义 Route
无标题文档先给出本文中测试用的 controller:public class PersonsController : Controller{ public ActionResult Query(string name) { return View(); }} ASP.NET 中 Url 大小写 不严格来讲,ASP
2012-02-23 17:50:55
1254
转载 ASP.NET MVC3的伪静态实现
最近使用asp.net MVC3开发B2C电子商务系统,为了SEO的优化工作,需要通过路由实现伪静态URL,后续再根据需要生成真正的静态页面,不直接走路由访问具体的页面。现在开始研究第一步,如何定义自己的路由规则,达到伪静态的功能需求。基本实现原理如下图: 首先,关于命名空间。路由的功能是为了让所有Asp.net网站开发都可以使用,所以dll并没有在MVC中,而是在System.W
2012-02-21 17:44:24
498
转载 C# Base64加密
/// /// Base64加密 /// /// 加密采用的编码方式 /// 待加密的明文 /// public static string EncodeBase64(Encoding encode, string source) { str
2012-02-14 16:44:58
614
原创 模仿php number_format函数的c# 价格转换函数
/// /// 价格转换函数 /// /// 价格字符 /// 保留几位 /// 小数点符号 /// 千位符号 /// public static string numberFormat(string fot, int rud, char xNo,
2012-02-10 17:44:53
632
转载 C#多线程实例
Thread th=new Thread(new ThreadStart(方法));th.Name="aa" 为线程命名th.Priority=ThreadPriority.Highest 最高 //运行的优先级
2011-09-24 11:40:19
559
原创 垓下歌
力拔山兮气盖世。时不利兮骓不逝。骓不逝兮可奈何!虞兮虞兮奈若何! (摘 读者 挂科于重修)元旦至兮要考试,事不利兮考不过。老不过兮要挂科,老章老章奈若何! 阁下不是老项,鄙人不是小虞。挂科远非垓下,重修好过别姬。
2009-11-22 23:26:00
435
适用VM的mac10.15.4映象cdr.txt
2021-02-23
关于CBC 3DES 加密问题,IOS 与 andorid加密不一致
2016-11-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人