調(diào)用block時(shí)沒(méi)有判斷Block是否為空
如果block為nil,直接調(diào)用會(huì)crash
ALiBlock block;
block(); //block是空的,妥妥的crash
正確的使用方法是先判斷block是否為空
if (block) {
block(); //確定不為空之后才放心地調(diào)用
}
調(diào)用了不存在的方法
如果不確定對(duì)象中是否有該方法,直接調(diào)用會(huì)有可能導(dǎo)致crash
NSObject *a = [][NSObject alloc] init];
[a aaa]; //NSObject里沒(méi)有叫aaa的方法,這樣會(huì)crash
正確的使用方法是在不確定對(duì)象是否有該方法時(shí),先判斷一下
if ([a respondsToSelector:@selector(aaa)]) {
[a aaa]; //確定有該方法之后才放心地調(diào)用
}
在cellForRowAtIndexPath中返回了nil
當(dāng)cellForRowAtIndexPath中返回nil時(shí),會(huì)直接crash。
出現(xiàn)這種情況的原因有:
numberOfRowsInSection返回的數(shù)目不正確,導(dǎo)致行數(shù)比cellForRowAtIndexPath預(yù)期的多,于是cellForRowAtIndexPath就不能正確返回超出預(yù)期的cell了。
cellForRowAtIndexPath中邏輯有誤,漏了一些情況,導(dǎo)致有些cell不能正確返回。
數(shù)組越界
這種老問(wèn)題不用多說(shuō),大家都很熟悉,但是又經(jīng)常出現(xiàn)。 = = |||
數(shù)組插入了nil對(duì)象
在數(shù)組中nil表示數(shù)組的結(jié)束位置。所以對(duì)數(shù)組進(jìn)行insert或addObject操作時(shí),如果插入了一個(gè)nil對(duì)象,那訪問(wèn)該對(duì)象之后的元素都會(huì)變成越界,OC為了安全,在插入nil的時(shí)候會(huì)直接crash。
正確使用方式是如果不確定一個(gè)元素是不是為空,就判斷一下吧。
重復(fù)release,或者不需要之后沒(méi)有置空
比如以下這個(gè)情況就會(huì)crash
UILabel *text = [[UILabel alloc] init];
[text release];
...// 中間干了很多事情
[text release];
NSLog(@"%@",text);