摘要:isMemberOfClass - 调用者必须是传入的类的实例对象才返回YES- 判断调用者是否是传入对象的实例,别弄反了,如 [s1 isMemberOfClass:p1] ,意思是s1是否是p1的实例对象- 不进行父类递归去查找判断 源码: 有两个方法,一个实例方法,一个类方法,两者区别: - 阅读全文
posted @ 2019-07-31 17:39 这酸爽! 阅读 (155) 评论 (0) 编辑
摘要:如何实现给分类“添加成员变量”? 默认情况下,因为分类底层结构的限制,不能添加成员变量到分类中。但可以通过关联对象来间接实现 关联对象提供了以下API 1> 添加关联对象 void objc_setAssociatedObject(id object, const void * key, id va 阅读全文
posted @ 2018-11-29 15:15 这酸爽! 阅读 (203) 评论 (0) 编辑
摘要:Category原理 - Category编译之后的底层结构是 struct categroy_t,里面存储着分类对象方法、属性、协议信息- 当程序运行时,通过runtime动态的将分类的方法、属性、协议合并到一个大数组中- 底层使用的是二维数组进行存储,比如:[[分类2方法列表],[分类1方法列表 阅读全文
posted @ 2018-11-15 16:23 这酸爽! 阅读 (339) 评论 (0) 编辑
摘要:定义 KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性 常见的API有: setValue:forKey:的原理 解析:当我们执行 setValue 的时候,要会去判断这个对象有没有 setKey 和 _setKey 这两个方法,按顺序判断,如果有就 阅读全文
posted @ 2018-11-05 17:21 这酸爽! 阅读 (168) 评论 (0) 编辑
摘要:KVO的原理是什么?底层是如何实现的? KVO是Key-value observing的缩写。 KVO是Objective-C是使用观察者设计模式实现的。 Apple使用了isa混写(isa-swizzling)来实现KVO。 我们可以通过代码去探索一下。 创建自定义类:XGPerson 我们的思路 阅读全文
posted @ 2018-11-02 16:05 这酸爽! 阅读 (354) 评论 (0) 编辑
摘要:一些OC底层的研究。 阅读全文
posted @ 2018-09-28 10:06 这酸爽! 阅读 (441) 评论 (0) 编辑
摘要:print、p: 打印内存地址 po: 打印对象 注:当一个变量使用 p 打印不出内存地址时,可以转换成id类型进行打印,如: p (id)var print、p: 打印内存地址 po: 打印对象 注:当一个变量使用 p 打印不出内存地址时,可以转换成id类型进行打印,如: p (id)var 1、 阅读全文
posted @ 2018-09-26 17:03 这酸爽! 阅读 (57) 评论 (0) 编辑
摘要:查看一个NSObject对象占用多少内存 1、引入头文件: #import <objc/runtime.h> #import <malloc/malloc.h> 2、代码如下: 1>、通过 class_getInstanceSize 可以获取类对象实际占用的大小 2>、通过 malloc_size  阅读全文
posted @ 2018-09-26 16:17 这酸爽! 阅读 (777) 评论 (0) 编辑
摘要:效果图 设计要求 1、画笔能设置大小、颜色 2、有清屏、撤销、橡皮擦、导入照片功能 3、能将绘好的画面保存到相册 实现思路 1、画笔的实现,我们可以通过监听用户的 平移手势 中创建 UIBezierPath 来实现线条的绘制 2、撤销功能,我们先来看下撤销功能,我们会想到用一个数组队列将用户的每一次 阅读全文
posted @ 2017-03-31 11:06 这酸爽! 阅读 (2584) 评论 (1) 编辑
摘要:先看下效果 手势相关的介绍 IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1、点击 UITapGestureRecognizer 2、平移 UIPanGestureRecognizer 3、缩放 UIPinchGestureR 阅读全文
posted @ 2017-03-27 14:33 这酸爽! 阅读 (4362) 评论 (0) 编辑