說一下自己在寫項(xiàng)目的時(shí)候遇到的一個(gè)坑输钩,真的是比較坑呀肪凛!有時(shí)系統(tǒng)cell的line沒法滿足需求灌旧,一般我都會(huì)選擇寫一個(gè)分類修改一個(gè)cell的高度就會(huì)起到線的效果莱衩;結(jié)果這個(gè)分類在進(jìn)行cell編輯的時(shí)候卻讓我掉坑里啦周蹭!這不我在左劃時(shí)就出了奇葩的bug趋艘!先梳理一下其他知識(shí):
分類
Category的作用
- 可以在不修改原來類的基礎(chǔ)上, 為這個(gè)類擴(kuò)充一些方法
- 一個(gè)龐大的類可以分模塊開發(fā)
- 一個(gè)龐大的類可以由多個(gè)人來編寫,更有利于團(tuán)隊(duì)合作
Category的使用注意:
- 分類只能增加方法,不能增加成員變量
- 在分類方法的實(shí)現(xiàn)中可以訪問原來類的成員變量
- 分類中可以重新實(shí)現(xiàn)原來類的方法,但是會(huì)覆蓋原來的方法
- 方法的調(diào)用優(yōu)先級(jí):分類->原來的類->父類
類的啟動(dòng)過程
+load方法
- 在程序啟動(dòng)的時(shí)候會(huì)加載所有的類和分類,并調(diào)用所有類和分類的+load方法(只會(huì)調(diào)用一次)
- 先加載父類凶朗,再加載子類瓷胧;也就是先調(diào)用父類的+load,再調(diào)用子類的+load
- 先加載元原始類棚愤,再加載分類
- 不管程序運(yùn)行過程有沒有用到這個(gè)類搓萧,都會(huì)調(diào)用+load加載
+initialize
- 在第一次使用某個(gè)類時(shí)(比如創(chuàng)建對(duì)象等),只會(huì)調(diào)用一次+initialize方法
- 一個(gè)類只會(huì)調(diào)用一次+initialize方法宛畦,先調(diào)用父類的瘸洛,再調(diào)用子類的
bug是這樣的 :
我的分類這樣寫的:
- (void)setFrame:(CGRect)frame{
frame.size.height -= 1;
[super setFrame:frame];
}
如果我把上面分類的代碼注釋掉,bug 就消失啦次和!
我滑動(dòng)一下cell就要執(zhí)行一次setFrame:
所以會(huì)出現(xiàn)cell上移的問題反肋;cell的正常高度應(yīng)該是44-1;
我多劃幾次就這樣啦: