sunny大神的blog关于 xib的动态桥接 和demo sunnyxx/XXNibBridge · GitHub
那么在研究了孙源大神的demo之后,我来做个总结吧。
1. 在load方法里面将系统方法awakeAfterUsingCoder和作者自己自定义的hackedAwakeAfterUsingCoder方法交换。
这里load方法是当app启动时第一次将所有类都加载的时候调用。
这里sunny大神运用runtime的黑魔法,将系统方法的指针指向了自己的方法内部实现。
2. 让xib中的view遵守XXNibBridge协议。
之所以要遵守这个协议是因为,在被替换的方法hackedAwakeAfterUsingCoder中用到了作者自己设计的方法。不遵守就不能用,则替换方法就不起作用。
因为替换方法会被系统自动调用,因此作者只在load中替换掉,并在自己的hackedAwakeAfterUsingCoder方法中实现即可。
3. 当加载对应的xib时,系统会找到作者自定义的方法hackedAwakeAfterUsingCoder,这时,将rearview替换掉placeholder view即可。
也即是迁移AutoLayoutConstrains。
至于从xib创建真正的view时也会调用这个方法,会造成递归,用flag进行判断。demo中并没有写。