Objective C改进
文章平均质量分 76
龚成诗
这个作者很懒,什么都没留下…
展开
-
一个对RxSwift集成思想的借鉴:KKReactors
使用KVO的痛点视为一个iOS开发老司机,我在日常使用KVO过程中发现了KVO的一些不足:1、调用复杂,算上调用者,总共涉及到5个参数2、响应函数与调用地方分隔在不同的地方,阅读代码需要跳转3、一个观察者观察了多个对象后,回调里不好区分究竟是哪个变量发生了回调4、需要手动释放KVO,过多的调用removeObserver会导致闪退5、对于极其频繁的变量变动,我们无法屏蔽一些过于密集的KVO调用解决思路鉴于KVO以上的种种缺点,我决定封装一个类,来简化KVO的使用:下面罗列了以上5个痛点的解原创 2021-03-23 09:22:43 · 322 阅读 · 0 评论 -
几个非常有用的宏
单例定义宏#define SINGLETON_H +(instancetype)sharedInstance;#define SINGLETON_M \+ (instancetype)sharedInstance {\ static id instance = nil;\ static dispatch_once_t onceToken;\ dispatch_once(&onceToken, ^{instance = [[super al原创 2021-03-22 11:42:45 · 379 阅读 · 0 评论 -
一个可以用于多个设计模式场景中的框架:BlockSequence
项目案例分析在项目开发过程中,我们往往会遇到这样一种case:在有参数的时候不能运行代码,能运行代码的时候却没有参数。我可能说的有点绕。举个例子:假设我们需要新建一个VC(viewController)并push到navigation上,然后需要在新的VC上创建一个 尺寸为size的view,size的大小由上一个VC决定。这种情况下,我们可以在新VC的init(withViewSize)方法里创建view吗?不可以,因为这时候UI还没有创建好,那我们能在新VC的viewDidload里创建view原创 2021-03-21 09:11:01 · 652 阅读 · 0 评论 -
用NSSetUncaughtExceptionHandler尝试抓取零星闪退
关于零星闪退在项目开发过程中,我们偶尔会遇到这类问题,使得我们很难定位。这种bug闪退概率很低,设备连机后,app不闪退,但是app递交到QA或者用户那里去了之后,又会有零星的闪退。这类问题比较恶心。传统的做法是:接入类似友盟、bugly等第三方插件,让它们将app的闪退日志上传到他们的后台,然后我们去它们的后台查看日志。这种方法能在一定程度上帮助定位问题。但是由于这种第三方库上传日志有延迟,而且查看日志并非事故发生第一现场,导致我们定位bug效率偏低。我们的解决办法而我们组的做法是:在非上架的包里使原创 2021-03-18 15:43:26 · 564 阅读 · 0 评论 -
一个对dispatch_group的改进:TaskHarmonizer
dispatch_groupdispatch_group是GCD中给我们提供的一个非常好用的功能,它的主要用途是协同任务。即保证某个任务一定在其他任务完成之后才进行。典型的使用案例是:进入页面后,我们需要等待三个网络请求,等三个界面都返回后在主线程刷新界面(下面简称案例)dispatch_group实现以上案例的逻辑。dispatch_group实现案例的时候主要涉及到4个接口,简单介绍如下:dispatch_group_create 创建一个dispatch_group_t对象void dis原创 2021-03-15 13:56:34 · 328 阅读 · 0 评论 -
一个简单而严谨的单例创建方法
关于单例单例模式是一种古老而常用的设计模式,相信大家都已经能熟练编写单例代码,我在这里不再赘述单例的实现。大部分情况下,我们的单例都是主线程使用,所以这里暂时不考虑线程同步问题。不考虑同步问题的情况下,单例一般的书写方式如下:+ (instancetype)sharedInstance { static id instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{in原创 2021-03-13 17:09:47 · 145 阅读 · 0 评论 -
全局秒定时器
@全局秒定时器全局秒定时器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。全局秒定时器我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图原创 2021-03-01 10:07:27 · 229 阅读 · 0 评论 -
关于SDWebImage的几个缺陷的改进
关于SDWebImage众所周知,SDWebImage是一款众所周知的第三方插件,它实现了控件上的图片的远程加载。非常的好用。它还采用了双极缓存————内存、磁盘存储,保证了重复图片有较高的概率避免下载,可以说是用空间换速度的一个典型的范例。它的这种设计模式,有点像我们大学里《微机原理》上讲过的CPU的二级缓存,用硬件提高CPU的访问命中率,从而提高CPU访问内存的效率SDWebImage众多的参数,保证了它的使用非常灵活。它接受的参数有:urlstateplaceholderoption原创 2021-03-11 19:33:51 · 391 阅读 · 0 评论 -
如何优雅地给目标变量设置额外的变量
分类为啥不能添加成员变量?先看Category的底层结构struct _category_t {const char *name;struct _class_t *cls;const struct _method_list_t *instance_methods; // 对象方法列表const struct _method_list_t *class_methods; // 类方法列表const struct _protocol_list_t *protocols; // 协议列表co原创 2021-03-06 15:29:14 · 181 阅读 · 0 评论