ios遇到的問題與坑

持續更新

1.問題: 為什么把NSTimer對象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主運行循環以后,滑動scrollview的時候NSTimer卻不動了?
解答: nstime對象是在 NSDefaultRunLoopMode下面調用消息的,但是當我們滑動scrollview的時候,NSDefaultRunLoopMode模式就自動切換到UITrackingRunLoopMode模式下面,卻不可以繼續響應nstime發送的消息。所以如果想在滑動scrollview的情況下面還調用nstime的消息,我們可以把nsrunloop的模式更改為NSRunLoopCommonModes.

2.問題: runtime如何實現weak變量的自動置nil?
解答: runtime 對注冊的類, 會進行布局,對于 weak 對象會放入一個 hash 表中。 用 weak 指向的對象內存地址作為 key,當此對象的引用計數為0的時候會 dealloc,假如 weak 指向的對象內存地址是a,那么就會以a為鍵, 在這個 weak 表中搜索,找到所有以a為鍵的 weak 對象,從而設置為 nil。

3.問題:tableView滑動不到最底端
解答:[self.view addSubView:tableView]改成self.view = tableView;

4.問題:UILabel的enabled設為NO之后,所有設置都不管用。
解答:enabled = yes;

5.問題:UITableViewCell在左滑刪除時有網絡請求的情況崩潰
解答:在刪除倒數第二個cell的時候執行的網絡請求還沒回來,tableview還沒刷新,這時刪除倒數第一個cell。之前的刪除請求block回來之后刷新tableview,但是后面的網絡請求的block內的indexPath沒更新,導致越界crash。解決方法是在請求時使用HUD等卡住主線程。

6.問題:dispatch_once()中第一個參數dispatch_once_t類型的變量能定義成局部變量嗎?
解答:只能定義成全局變量或static變量,如下圖寫法是錯誤的:

原因是在堆上的變量,其地址被重復使用,在地址原有值不為 0 的情況下,GCD 無法保證在多線程場景下 block 內容執行且僅執行一次。

7.nil對象 調 rangeOfString返回的不是 NSNotFound

8.改變UISearchBar內clearButton的圖像
[self.mSearchBar setImage:[UIImage imageNamed:@"inputCancel"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

9.改變cell點擊顏色
self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];
self.selectedBackgroundView.backgroundColor = CHCellTouchUpColor;

10.如何阻止CAShapeLayer的strokeEnd動畫
[CATransaction begin];
[CATransaction setDisableActions:YES];
shapeLayer.strokeEnd = 1;
[CATransaction commit];

11.NSAttributedString 的initWithData方法非常耗時,稍不注意就會引起卡頓,需要把init方法放到子線程中。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容