iOS开发小技巧(二)

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

 

2.自动缩放掩码autoresizingMask函数

 

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

 

3.UIView的不一样contentMode,放大或缩小图片的frame时,略有差别。测试

 

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

 

5.UIViewController,若是自定义init方法时,不要调用self.view的有关方法,由于,init的时候并不必定要加载view,这样作的话,就破坏了ios的延迟加载机制。代理

 

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

 

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,若连续点击会出问题。