休了一陣子假期,今天剛回來上班,項目代碼已經有挺大的變化了,我就先體驗、發現、跟進問題。
第一個問題是點擊某個cell就掛掉的現象,同事表示必現但挺神奇。由於掛掉的時候沒有啥有意義的信息,所以先簡單粗暴地在
打個斷點,結果還沒命中就掛了。再一看cell的布局,發現是在一個UITableViewCell對象的contentView上面addSubview一個由nib文件加載進來的UI控件,在這個控件中有響應touch事件:
很遺憾同樣還沒命中斷點就掛了,所以我嘗試增加了如下函數:
結果很意外地發現好了。但是如果將事件傳遞給super時,依然會掛。從而定位到是上一級視圖的問題,後來發現是這麼一行代碼:
漏掉初始化了。
第二個問題是在傳參過程中,直接將NSNumber指針賦值給BOOL變量,而不是取其boolValue。
第三個問題是在UITableView的headerView上結合searchBar控件遇到的,在非ARC的dealloc代碼中,掛在:
這個比較容易聯想到二次釋放,所以我直接先采用Profile工具做一次NSZombie的檢查,令人開心的是中了,令人遺憾的是沒有定位到太有價值的代碼行。
但是可以基本推斷出跟UITableView及其headerView有一定關系。又由於場景是可以重現的,所以通過注釋掉dealloc函數裡德其它代碼定位到是tableView釋放時引發的,但經常反復檢查,確認沒有二次釋放,最終發現通過以下代碼可以避免:
這點倒沒有完全理清楚,目前懷疑是引用searchBarController和searchBar時,一些引用技術上引發的問題。 ……