iOS开发小技巧(二)

来源:互联网 发布:新大洋知豆电动汽车 编辑:程序博客网 时间:2024/05/08 07:57


1.UIView中支持动画的属性有frame,bounds,center,transform,alpha。

 

2.自动缩放掩码autoresizingMask

 

试图的上下左右边界和宽高当父视图变化时,与父视图按比例变化。

 

3.UIView的不同contentMode,放大或缩小图片的frame时,略有差异。

 

4.view.clipsToBounds = YES;父视图该属性设置成YES,子视图超过父视图的部分将显示不出来,这样可以防止超出部分,不响应事件造成不必要的麻烦。

 

5.UIViewController,如果自定义init方法时,不要调用self.view的有关方法,因为,init的时候并不一定要加载view,这样做的话,就破坏了ios的延迟加载机制。

 

6.如果从nib文件加载UIView,则其是通过NSCoding协议定义的initWithCoder方法来进行的。

 

7.上下滚动视图时,把视图的clearsContextBeforeDrawing属性设置未NO,可以提高描画性能。

 

8.默认情况下,视图一次只响应一个触摸动作,第二个手指的触摸将被忽略。

 

9.事件传递过程 UITouch识别触摸对象-->封装成UIEvent并将其放入当前的应用程序事件队中-->UIApplication单利从事件队列顶部取出事件-->派发给UIWindow-->发送给第一响应者对象处理事件。

 

应用程序通过碰撞测试hit--testing来寻找事件的第一响应者,即通过递归调用视图层次中视图对象的hitTest:withEvent:方法来去人发生触摸的子视图。

 

UIApplication和UIWindow对象都是通过各自的sendEvent:方法派发对象的,所以,该方法是进入应用程序的通道。

 

10.响应者链,由第一响应者(通常为UIView)逐步向上传递,传递顺序如下:

(1).第一响应者将事件传递给它的视图控制器(如果有的话),然后是它的父视图。

(2).类似地,视图层次中的每一个后续视图都首先传递给它的视图控制器,然后是它的父视图。

(3).最上层的容器视图,将事件传递给UIWindow对象。

(4).UIWindow对象将事件传递给UIApplication单利。

如果应用程序找不到能处理事件的响应者,则丢弃该事件。

响应者链中的所有响应者对象都可以接受部分事件,把其余的事件消息转发给下一个响应者。

 

11.动作消息处理,如UIControl,UIButton及其子类,先向目标对象发送动作消息。但是,如果动作消息被设置成nil,则应用程序会将其发送给第一响应者和响应者链。

 

12.隐藏或透明的视图不可以接受事件。

 

13.检测单个或多碰触手势,最好在touchesEnded:withEvent:事件中,而不是在touchesBegan:withEvent:事件中,因为这样可以更好的确认是真正的碰触(点击)事件的发生。

 

14.方法尽量带参数,形成一个链状的执行状态最好,一概全改;避免过多得使用全局变量,一个类的成员变量越少越好,函数要短小清晰,否则维护起来难度大。

 

15.BOOL变量或是其他有过逻辑关系的变量最好集中到一起来初始化,如果,需要刷新到原始状态的话,直接调用这个初始化函数就好了。

 

16.代理如m_tableView.delegate最好在dealloc里面设置为nil,防止自己这个类消失了,别的类的delegate还在找自己这个类,导致崩溃。通知,延迟执行的函数也是一样

 

17.最好用if(YES){[dosomething];};尽量少用if(NO){return;};

 

18.如果连续点击发相同或者不同的请求时,应该取消掉之前所有的请求。

 

19.函数尽量使用金字塔式的调用形势

 

20.打印详细的错误信息infomalloc-history 0x15a40560 后面是加要打印的内存地址

 

21.如果点击一个按钮法请求,且将一个BOOL 值设置为YES,在回调里面判断BOOL值,如果为YES,则做某事且BOOL 设置为NO,若连续点击会出问题。

0 0
原创粉丝点击