Source Code Learning - IQKeyboardManager

OC 中如何做到不加一行代码就实现功能的

IQKeyboardManager

+(void)load
{
    //Enabling IQKeyboardManager. Loading asynchronous on main thread
    [self performSelectorOnMainThread:@selector(sharedManager) withObject:nil waitUntilDone:NO];
}

利用 +load 方法来实现不调用就执行的功能

另: +load 方法
每个类在 OC runtime 中会自动调用两个方法,+load 方法是类初始化的时候调用, +initialize 是类或者实例的方法第一次被调用的时候调用。但是,在 Swift 桥接到 C 的代码中自定义的 +load 方法不会自动被调用,所以 Swift 需要写一行代码来实现,OC 不用。

父类先执行 +load,子类后执行。类的+load 先执行,Category 的该方法后执行。

+load 和 +initialize 是线程安全的,但是 IQKeyboardManager 中有 UI 操作说一要保证其在主线程中执行。

初始化中会调用注册方法,注册监听键盘和展开和收起事件,并为 UITextField 和 UITextView 分别注册开始编辑和结束编辑事件。事件中处理 adjustFrame 方法调整 Frame。

手动开关设置的处理都在初始化中进行,可以设置的功能见文档,自定义设置方法

// … 待完成

参考文章

+load 方法

请我喝汽水儿