天天看點

iOS crash 總結

1、ARC中,對于調用私有函數調用中,傳回值是void 或者參數本身是基本類型的,如果使用了id,因為ARC中會對參數和傳回值進行retain,是以都會産生objc_retain的crash。 delloc函數是異步的:當對對象調用release的時候,即使該對象的retaincount = 0, 該對象的delloc函數也不是同步調用的。 例子:UIWebViewWk的destory函數的原因。 

2、通用的情景是:觀察者使用的時候。 A->B->C A做為B的觀察者向下傳遞,B中的C會回調到A中方法。 傳統的A的delloc方法中銷毀B,B的delloc方法中銷毀C。在OC中由于 對象release之後,delloc方法是異步調用的,A delloc之後,B的retainCount = 0,但是當B的delloc函數還沒有 調用的時候,C發生回調,就會因為A的野指針crash。 這個時候就要實作B的destory方法來銷毀C。 這個destory方法在A的delloc方法中進行調用。這樣就保證了A delloc的時候C也delloc了。 

3、docmentView上面加入手勢,網頁内容發生改變,如頁内的視訊跳轉之後,手勢發生crash. 

4、panGesture手勢沒有調用touchMove,而初始化的代碼放在了touchMove中,導緻變量沒有初始化,成為了野指針

 5、屬性對象沒有retain,delloc的時候crash.