欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常见crash  

程序员文章站 2024-03-14 23:23:35
...

1. 参数的默认值

  • 使用指针 需要做非空判断
  • nil 判断
  • [NSNull null]判断

NSDictionary&&NSArray

  • 代码里面很多地方使用了setObject:forKey以及其它的初始化, 如果插入nil,崩溃
  • AddObject的时候,add nil也会crash
  • objectForKey: 类型错误

数据类型错误

简单判断dictionary和array不为空,里面实际没有数据。后端的返回的数据 对类型做判断,dictionary、array

数组越界

  • objectAtIndex 取值的时候一定要做数组大小判断,防止越界取值。涉及index的时候,最好都做检查

substringWithRange/substringFromIndex/substringToIndex

涉及range的操作都需要做一下NSString长度的判断

textView.text = [textView.text substringWithRange:NSMakeRange(0, 100)];

使用delegate,Notification NSTimer 没有取消

使用delegate,Notification,NSTimer后,不使用了要注意取消掉,经常出现controller已经销毁,回调回来造成崩溃。

项目圈子、navigation delegate、collectionview 、tableview

使用不熟悉的api的时候

系统api自己不熟悉的时候,看一下api支持的最低版本,高版本的api在低版本使用的时候,会造成崩溃。

多线程操作

明确函数的生命周期,动画结束,block的使用,多线程读写,多线程函数的使用。

遍历数组的同时,又改变了数组的顺序

 

enumerateObjectsUsingBlock遍历的时候 exchangeObjectAtIndex:withObjectAtIndex insert del 的操作