欧阳大哥2013

Results 2 issues of 欧阳大哥2013

在一个很常见的场景中是我们在viewDidLoad里面执行beginRefreshing,这样系统的导航条push动画和下拉动画就会同时执行,给人的感觉就是在进入页面时会斜着进来的动画效果。这样严重影响体验。因此建议在MJRefreshComponent里面的drawRect进行状态更新时,不要产生动画,而是改为如下: - (void)drawRect:(CGRect)rect { [super drawRect:rect]; if (self.state == MJRefreshStateWillRefresh) { // 预防view还没显示出来就调用了beginRefreshing [UIView performWithoutAnimation:^{ self.state = MJRefreshStateRefreshing; }]; } }

enhancement

因为看到有这个不错的工具,因此在研究集成到工程中去,特意花了几天把源代码研读一番,下面是个人给出的几个建议希望能尽快升级这个库: 1.bool CStackHelper::isInAppAddress(vm_address_t addr)这个函数的实现不完全正确,第0个image的内容不一定就是可执行程序本身,有可能是dyld库或者其他一些比如用于XCODE调试和分析的一些支持库。 2.对于程序中获取所有image信息的数据结构AppImages看到只在一处进行初始化构建,但是实际中某些image是可能在运行时动态加载和卸载的,因此需要有一个机制能够在运行时动态更新所有的image信息。还是bool CStackHelper::getImageByAddr(vm_address_t addr,segImageInfo *image)这个函数有可能会返回false然后我看代码里面有不少这个函数的使用,当返回false时不进行处理,这样就如我上面说的某一些在运行时加载的image就无法查找到对应的信息从而漏了记录。 3.建议对获取的image信息进行开始地址和结束地址排序排列,这样在进行一些地址归属某个image时比如:bool CStackHelper::getImageByAddr(vm_address_t addr,segImageInfo *image)函数就可以用二分查找法来增强性能。 4.在编程风格上看到有OC代码有C++代码,但是代码中貌似没有语言层面分层的概念,有时候在众多C++代码中又突然调用OC代码,然后OC代码中又突然调用C++代码。这样的设计方法我觉得有待优化。 5.最后,优秀的开源库还是值得去接入和使用的。