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