说一下自己在写项目的时候遇到的一个坑,真的是比较坑呀!有时系统cell的line没法满足需求,一般我都会选择写一个分类修改一个cell的高度就会起到线的效果;结果这个分类在进行cell编辑的时候却让我掉坑里啦!这不我在左划时就出了奇葩的bug!先梳理一下其他知识:
分类
Category的作用
- 可以在不修改原来类的基础上, 为这个类扩充一些方法
- 一个庞大的类可以分模块开发
- 一个庞大的类可以由多个人来编写,更有利于团队合作
Category的使用注意:
- 分类只能增加方法,不能增加成员变量
- 在分类方法的实现中可以访问原来类的成员变量
- 分类中可以重新实现原来类的方法,但是会覆盖原来的方法
- 方法的调用优先级:分类->原来的类->父类
类的启动过程
+load方法
- 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法(只会调用一次)
- 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
- 先加载元原始类,再加载分类
- 不管程序运行过程有没有用到这个类,都会调用+load加载
+initialize
- 在第一次使用某个类时(比如创建对象等),只会调用一次+initialize方法
- 一个类只会调用一次+initialize方法,先调用父类的,再调用子类的
bug是这样的 :
我的分类这样写的:
- (void)setFrame:(CGRect)frame{
frame.size.height -= 1;
[super setFrame:frame];
}
如果我把上面分类的代码注释掉,bug 就消失啦!
我滑动一下cell就要执行一次setFrame:
所以会出现cell上移的问题;cell的正常高度应该是44-1;
我多划几次就这样啦: