持續更新
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方法放到子線程中。