你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> 隨手記今天跟的幾個iOS項目代碼的問題

隨手記今天跟的幾個iOS項目代碼的問題

編輯:關於IOS

休了一陣子假期,今天剛回來上班,項目代碼已經有挺大的變化了,我就先體驗、發現、跟進問題。

第一個問題是點擊某個cell就掛掉的現象,同事表示必現但挺神奇。由於掛掉的時候沒有啥有意義的信息,所以先簡單粗暴地在

  1. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  2. {

打個斷點,結果還沒命中就掛了。再一看cell的布局,發現是在一個UITableViewCell對象的contentView上面addSubview一個由nib文件加載進來的UI控件,在這個控件中有響應touch事件:

  1. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
  2. {

很遺憾同樣還沒命中斷點就掛了,所以我嘗試增加了如下函數:

  1. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

結果很意外地發現好了。但是如果將事件傳遞給super時,依然會掛。從而定位到是上一級視圖的問題,後來發現是這麼一行代碼:

  1. cell.selectedBackgroundView = [[UIView alloc] autorelease];

漏掉初始化了。

第二個問題是在傳參過程中,直接將NSNumber指針賦值給BOOL變量,而不是取其boolValue。

  1. 直接用@(0)對BOOL值賦值,而不是[@(0) boolValue];

第三個問題是在UITableView的headerView上結合searchBar控件遇到的,在非ARC的dealloc代碼中,掛在:

  1. [super dealloc];

這個比較容易聯想到二次釋放,所以我直接先采用Profile工具做一次NSZombie的檢查,令人開心的是中了,令人遺憾的是沒有定位到太有價值的代碼行。

但是可以基本推斷出跟UITableView及其headerView有一定關系。又由於場景是可以重現的,所以通過注釋掉dealloc函數裡德其它代碼定位到是tableView釋放時引發的,但經常反復檢查,確認沒有二次釋放,最終發現通過以下代碼可以避免:

  1. self.tableView.tableHeaderView = nil;

這點倒沒有完全理清楚,目前懷疑是引用searchBarController和searchBar時,一些引用技術上引發的問題。 ……

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved