[小细节,大BUG] 6.问题描述:当从Plist文件加载数据,放入到tableView中展示时,有时有数据,有时又没有数据。这是为什么呢?相信很多大牛都想到了:我们一般将加载的数据,转换成模型,放入到数组中去。然后根据数组,动态的进行数据展示。结果错误就在此:对数组的引用使用了weak,所以造成了数据有时丢失的情况。那么有个细节不知道各位有没有注意到,为什么有时有,有时没有呢?这就关系到XCODE对僵尸对象的处理了,详细介绍请看本博客中的《OC内存管理--zombie对象》
[小细节,大BUG] 5.NSRunLoop细节引发的问题:案例说明:当做“图片轮播器”的时候,使用NSTimer *timer = [NSTimer timerWithTimeInterval: invocation:repeates:];进行定时播放,然而有个问题,就是当与其同处界面的tableView被上下拉动时,轮播器停止滚动,而当停止后,轮播器加速滚动,这是什么原因呢?主要原因是因为在timer与tableView同时执行情况,当拖动tableView时,runloop进入UITrackingRunLoopModes模式下,不会处理定时事件,此时timer不能被处理,所以此时将timer加入到NSRunLoopCommonModes模式(addTimer forMode);即[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
[小细节,大BUG] 4.当你使用storyboard添加一个scrollView时,发现在运行时怎么也无法滚动。这时候就我们能考虑到的因素有哪些呢?第一,storyboard,中autolayout是否勾选去掉(可能性最大);第二,scrollEnabled是否设置为yes(可能性小);第三,userInteractionEnabled,是否设置为yes(可能性最小);第四,contentSize未设置(一般都不会忘)
[小细节,大BUG] 3.另外一个有意思的BUG:当在一个视图中添加UIButton时,发现根本无法点击.此时,你会想到怎样解决吗?检查父控件的userInteractionEnabled?检查按钮的enabled?或者其他的?对,我也这么做了,可最后我被这个BUG玩了,最终经过排查,发现其父控件的frame为CGRectZero!!!这又跟IOS事件传递机制与响应者链有关系.这个错误是在事件传递的过程中出现的问题:要知道事件传递是由UIApplication-->UIWindow....一直到最顶层的子控件,找到最合适的控件来响应,而所谓的合适满足两个条件:一,自己是否能够响应? 二,触摸点是否再自己身上.然后针对子控件进行遍历,重复以上两个步骤.相信到这里大家都明白了吧,就是在第二个条件出现了问题.触摸点不在其父控件身上.所以事件根本没有传递到按钮这里来,造成不能响应的BUG.
[小细节,大BUG] 2.在IOS开发中,大部分人都了解了加载UIImage时,使用[ UIImage imageNamed:]和[UIImage imageWithContentOfFile : ]的主要区别,即前者会缓存图片,造成手机内存飙升而出现应用闪退的现象。后者并不缓存图片。然而,当有人去试着将前者改为后者时,造成了程序崩溃?经排查,原因是因为当构造图象地址时,图片名称的大小写问题.imageNamed:对于图片名称的大小写并不敏感,而imageWithContentOfFile:则严格要求路径的大小写正确.
[小细节,大BUG] 1. 在不久前,一个朋友出现了这样一个BUG:当UITableView加载cell的时候,自定义的cell,怎么显示,里面的文字总是显示不完全(注意,文字不长).然后,我帮忙给看了下,甚至把在storyBoard中将cell的相关属性都试了下,虽然可以解决,但是效果不理想.最终经过排查,终于发现问题所在:当自定义cell时,因为需要布局子控件,所以他重写了layoutSubviews方法,然而在此方法中没有调用[super layoutSubviews],所以造成了布局混乱.再次引以为戒.
(为方便查看,进行倒序更新。。。)