改 bug 的一些方法

2018-06-21  本文已影响16人  活最好的自己

1. 高度或间距问题

  1. 改 collectionview 的间距, 可以把layout:sizeForItemAtIndexPath: 方法返回的值, 全部改成无限大或无限小(先不管 section)
  2. 如果依旧没什么用, 可以把layout:insetForSectionAtIndex:方法的值全部改成无限大或无限小(先不管 section), 也就是不计后果的那种.

2. 重叠问题

A页面继承于 B 页面, A 的页面明显超出了 B 的位置 ===> 全局搜索 super 方法, 只有initWithFrame:方法中有 super, 因此需要在创建 A 或 B 时, 各自单独调用initWithFrame:中的方法 ==> 原因是 A 继承了 B 的视图, 自己也创建了一份, 但是只给 A 的视图赋值并更新位置, 没有给 B 的视图赋值和更新位置.

3. 按钮显示后又消失问题

  1. 可以在按钮懒加载创建的地方插入断点, 或者在当前类中, 重写 get 方法, 在 get 方法中插入断点, 在 self. 代码处, 被调用, 但是没有发现被移除或被隐藏的地方.
  2. 由于是 UIButton, 可以在 UIButton的分类中, 重写 dealloc方法(分类中的方法会优先被调用), 确定当前视图是否被隐藏或被移除掉. ===> 结果是它的 dealloc 方法被调用了多次, 而且从调用关系结构图中发现, 其父类的 dealloc 方法也被调用了, 而且是在数组中被移除的. ===> 可以推断, 按钮消失的过程与父视图的被移除也是有关的.

4. 循环引用的两种常见情况:

  1. block 强引用
1. copy 的 block  属性里面含有 self
2. copy 的 block  属性里面含有 带有下划线的强应用
3. A对象拥有的 block 属性里面调用了 A 对象
4. A对象的 delegate 是 strong 属性(如CABasicAnimation的 delegate 是强引用, 可以参考http://www.chjsun.top/2017/01/04/animation/animation1/)

  [_loadingView setLoadingFailedBlock:^{
            //
            weakself.loadingView.hidden = NO;
            [weakself.loadingView loading];
            [weakself loadNewData];
        }];

- (PTVAlbumPhotoBrowserView*)photoBrowserView
{
    if (_photoBrowserView == nil)
    {
        _photoBrowserView = [PTVAlbumPhotoBrowserView new];
        _photoBrowserView.parentVc = self; //parentVc 是 strong 属性
    }
    return _photoBrowserView;
}

  1. 通知
1. addObserver:forKeyPath:options:context:方法, 没有及时的remove 掉.
2. 通过类似方法添加代理, `[[WuKongManager sharedInstance] registerRechargeGiftPackegData:self]`, 没有及时移除.

5. 定位客户问题

  1. 可以使用打点, 确定用户是否确实做了某些行为.
上一篇下一篇

猜你喜欢

热点阅读