調(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ì)象惫恼,那訪(fǎng)問(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);