
代码块里面无法使用数组
LazyLoad 2.0
直到我看到 FDTemplateLayoutCell 的源码,看到 FDIndexPathHeightCache 里面有这么一个宏 FDPrimaryCall(...)
好奇心使我尝试了一下,神奇的发现它竟然可以在代码块里面写数组,于是研究了下,终于可以愉快的让所有懒加载都用上这个方便的宏了,实在是太感动了,感谢 Sunny 大神啊 ?
先来看看对比效果

对比
我承认我夸大了,实际的代码中肯定会有大量的换行,两边的实际代码量,不会有这样两倍的差距。
阿勒,被你们发现了,改进的宏不止加入了数组字典的支持,还加入了一个简短的临时变量 z, 可以让代码更简洁。不过按个人喜好,想用下划线变量也是可以的。
LazyLoad 最终版 !!!
#define GGLazyLoad(TypeNoPoint, Name, Code...) \
- (TypeNoPoint *)Name { \
if (!_##Name) { \
TypeNoPoint *z = nil; \
Code; \
_##Name = z; \
}\
return _##Name; \
}
#define GGLazyLoadNew(TypeNoPoint, Name, Code...) \
- (TypeNoPoint *)Name { \
if (!_##Name) { \
TypeNoPoint *z = [TypeNoPoint new]; \
Code; \
_##Name = z; \
}\
return _##Name; \
}
问题
当然了,这个宏定义并不是完美的,它有些无法解决问题
- 代码块里面的代码,着色不够完美
-
show document items(ctrl+6)这个列表里面,无法显示懒加载方法 - 还有无法断点调试

编辑器的问题
还有的问题,比如宏用多了影响编译速度啊,我觉得不太大,文件编译后都会有缓存。
最后,都 2020 年了,还在这里折腾 OC 是不是太落后了 ? 。
// Swift
lazy var nameLabel: UILabel = {
let z = UILabel.init()
return z
}()

评论列表