iOS开发小问题

1、如何判断scrollView停止

func scrollViewDidScroll(_ scrollView: UIScrollView) {

        NSObject.cancelPreviousPerformRequests(withTarget: self)
        self.perform(#selector(scrollViewDidEndScrollingAnimation(_:)), with: scrollView, afterDelay: 0.1)
}
    
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
        NSObject.cancelPreviousPerformRequests(withTarget: self)
}

2、ios 类似抖音个人主页多层级向内导航,无限纵深的那种,导致导航栈控制器很多,并且每个控制器内有多个gif播放animateimageview,多个collectionview。这种情况下的内存暴涨。

检查方式:Xcode debug 内存图、instrument。

sdwebimage 本身cache 占有内存过多并释放速度慢,且控制器不销毁的时候可释放资源有限。

3、bitcode的实际意义

LLVM是目前苹果采用的编译器工具链,Bitcode是LLVM编译器的中间代码的一种编码,

LLVM的前端可以理解为C/C++/OC/Swift等编程语言,

LLVM的后端可以理解为各个芯片平台上的汇编指令或者可执行机器指令数据,

那么,BitCode就是位于这两者直接的中间码. LLVM的编译工作原理是前端负责把项目程序源代码翻译成Bitcode中间码,然后再根据不同目标机器芯片平台转换为相应的汇编指令以及翻译为机器码.这样设计就可以让LLVM成为了一个编译器架构,可以轻而易举的在LLVM架构之上发明新的语言(前端),以及在LLVM架构下面支持新的CPU(后端)指令输出,虽然Bitcode仅仅只是一个中间码不能在任何平台上运行,但是它可以转化为任何被支持的CPU架构,包括现在还没被发明的CPU架构,也就是说现在打开Bitcode功能提交一个App到应用商店,以后如果苹果新出了一款手机并CPU也是全新设计的,在苹果后台服务器一样可以从这个App的Bitcode开始编译转化为新CPU上的可执行程序,可供新手机用户下载运行这个App.

Monkey 测试环境,引入(WDA)实现疲劳测试,避免临近发版前过晚暴露稳定性问题。
UITest mokney脚本、AWD。python脚本

集成FLEX,内存实时显示测试工具,增加内存触顶监控