Gopool 是字节跳动开源项目 gopkg 中的一个小工具,作用是以池化的思想来实现 goroutine 的复用,限制应用中 goutine 数量的无限增长。
使用介绍
Gopool 使用起来非常简单,只需要将项目中的 go 关键字替换为 gopool.Go:
go func() {
// do your job
}()
Gopool 是字节跳动开源项目 gopkg 中的一个小工具,作用是以池化的思想来实现 goroutine 的复用,限制应用中 goutine 数量的无限增长。
Gopool 使用起来非常简单,只需要将项目中的 go 关键字替换为 gopool.Go:
go func() {
// do your job
}()
Aspects是一个非常知名的用于 AOP 的 Objective-C 库,可以对类方法或者实例方法进行 Hook,虽然它的作者不推荐在生产环境下使用这个组件,但是了解 Aspects 的原理,对于我们更好地掌握 Objective-C 这门语言还是很有好处的,因此本文就来简要地分析下 Aspects 的实现细节。
这个库里的代码不多,只有 Aspects.h
和 Aspects.m
两个文件。头文件里定义了一个 NSObject 的分类,给所有 NSObject 的子类添加了两个方法,分别用于对类方法和对类实例方法进行 Hook:
EasyTuple
是由美团开源的一个第三方库,它给Objective-C 添加了元组的能力,可以将几个对象包裹在一个对象中,这样我们就可以从一个函数中返回多个值。它的使用非常简单,比如我们想创建一个由两个元素组成的元组,那么可以这样写:
EZTuple2<NSNumber *, NSString *> *tuple = EZTuple(@1, @"string");
在了解了 iOS 异常的分类和捕获原理后,我们继续深入探讨 KSCrash 这个优秀的异常监控框架的实现原理。KSCrash 作为一个功能丰富的异常监控方案,其实现涉及多个复杂的技术模块。本文将重点为你解析 KSCrash 的整体架构,并深入剖析其核心监控系统的实现细节。至于其他功能模块的实现,我们会在后续文章中逐一展开。
KSCrash 的整体架构清晰而模块化,主要包含五个核心部分:
在 iOS 开发中,布局是一个永恒的话题。Masonry 作为一个广受欢迎的自动布局框架,以其简洁的链式语法优雅地解决了这个问题。今天,让我们揭开它的神秘面纱,一起探索其内部实现原理。
在深入源码之前,我们先看看 Masonry 是如何简化我们的日常开发工作的。下面是一个典型的使用示例:
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(superview.mas_top).with.offset(padding.top);
make.left.equalTo(superview.mas_left).with.offset(padding.left);
make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
make.right.equalTo(superview.mas_right).with.offset(-padding.right);
}];
今天我们将对另外一个在 iOS 开发中广泛使用的库的源代码进行分析,这个库就是鼎鼎大名的 SDWebImage
。
SDWebImage
的使用非常简洁,往往可以用一行代码来完成图片设置工作。下面列出一些常用设置方法。
- (void) sd_setImageWithURL:(nullable NSURL *) url;
- (void) sd_setImageWithURL:(nullable NSURL *) url placeholderImage:(nullable UIImage *) placeholder;
- (void) sd_setImageWithURL:(nullable NSURL *) url placeholderImage:(nullable UIImage *) placeholder options:(SDWebImageOptions) options;
- (void)sd_setImageWithURL:(nullable NSURL *) url completed:(nullable SDExternalCompletionBlock) completedBlock;
- (void) sd_setImageWithURL:(nullable NSURL *) url placeholderImage:(nullable UIImage *) placeholder options:(SDWebImageOptions) options completed:(nullable SDExternalCompletionBlock) completedBlock;
前文分析过 Aspects
实现 AOP 的原理,而由饿了么开源的组件 Stinger同样是一个用于 AOP 的组件,并且饿了么宣称 Stinger
在性能上能够吊打 Aspects
,并且给出了测试的数据。那么 Stinger
究竟是如何实现性能的飞跃的呢?让我们一起来探究一下。