iOS开发中常见的一些异常
iOS开发中常见的异常包括以下几种
NSInvalidArgumentException
NSRangeException
NSGenericException
NSInternallnconsistencyException
NSFileHandleOperationException
NSInvalidArgumentException
非法参数异常是objective-C代码最常出现的错误,所以平时写代码的时候,需要多加注意,加强对参数的检查,避免传入非法参数导致异常,其中尤以nil参数为甚。
1、集合数据的参数传递
比如NSMutableArray,NSMutableDictionary的数据操作
(1)NSDictionary不能删除nil的key
NSInvalidArgumentException reason, -[__NSCFDictionary removeObjectForKey:]:attempt to remove nil key
(2)NSDictionary不能添加nil的对象
NSInvalidArgumentException reason,***-[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[4]
(3)不能插入nil的对象
NSInvalidArgumentException reason,***-[__NSArrayM insertObject:atIndex:]: object cannot be nil
(4)其他一些nil参数
NSInvalidArgumentException reason, -[__NSCFString hasSuffix:]: nil argument
2、其他一些API的使用
APP一般都会有网络操作,免不了使用网络相关接口,比如NSURL的初始化,不能传入nil的http地址:NSInvalidArgumentException reason,***-[NSURL initFileURLWithPath:]: nil string parameter
3、为实现的方法
(1).h文件里函数名,却忘了修改.m文件里对应的函数名
(2)使用第三方库时,没有添加”-ObjC”flag
(3)MRC时,大部分情况下是因为对象被提前release了,在我们心里不希望他release的情况下,指针还在,对象已经不在了。
NSInvalidArgumentException reason =-[UIKBBlurredKeyView candidateList]: unrecognized selector sent to …
NSInvalidArgumentException reason =-[UIThreadSafeNode_responderForEditing]: unrecognized selector sent …
NSRangeException
越界异常(NSRangeException)也是比较常出现的异常,有如下几种类型:
1、数组最大下标处理错误
比如数组长度count,index的下标范围[0,count-1],在开发时,可能index的最大值超过数组的范文;
NSRangeException reason = ***-[_NSarrayM objectAtIndex:]: index 19 beyond bounds [0..15]
2、下标的值是其他变量赋值
这样会有很大的不确定性,可能是一个很大的整数值
NSRangeException reason = ***-[_NSarrayM objectAtIndex:]: index 2147483647 beyond bounds [0..4]
NSRangeException reason = ***-[_NSarrayM objectAtIndex:]: index 18446744073709551615 beyond bounds [0..4]
3、使用空数组
如果一个数组刚刚初始化还是空的,就对它进行相关操作
NSRangeException reason = ***-[_NSarrayM objectAtIndex:]: index 0 beyond bounds for empty array
所以,为了避免NSRangeException的发生,必须对传入的index参数进行合法性检查,是否在集合数据的个数范围内。
NSGenericException
NSGenericException这个异常最容易出现在foreach操作中,在for in循环中如果修改所遍历的数组,无论你是add或remove,都会出错,比如:
|
for (id elem in arr) { [arr removeObject:elem]; } |
执行上面的代码会出现以下错误:
NSGenericException reason = *** Collection<__NSArrayM:0x175058330>was mutated whild being enumerated.
原因就在这 “for in”,它的内部遍历使用了类似 Iterator进行迭代遍历,一旦元素变动,之前的元素全部被失效,所以在foreach的循环当中,最好不要去进行元素的修改动作,若需要修改,循环改为for遍历,由于内部机制不同,不会产生修改后结果失效的问题。
|
for (NSINteger i=0; i<[arr count]; i++) { id elem = [arr objectAtIndex:i]; [arr removeObject:elem]; } |
NSMallocException
这也是内存不足的问题,无法分配足够的内存空间
NSMallocException reason = ***-[NSConcreteMutableData appendBytes:length:]: unable to allocate memory for length(81310)
NSFileHandleOperationException
处理文件时的一些异常,最常见的还是存储空间不足的问题,比如应用频繁的保存文档,缓存资料或者处理比较大的数据:
NSFileHandleOperationException reason:***-[NSConcreteFileHandle writeData:]: No space left on device
所以在文件处理里,需要考虑到手机存储空间的问题。
原文:://blog.csdn.net/qq_16270605/article/details/52259638
iOS开发中常见的一些异常的更多相关文章
- iOS 开发中常见的设计模式
最近有小伙伴问到在iOS开发中的几种设计模式,这里摘录一下别人的总结(因为已经感觉总结得差不多了,适用的可以阅读一下) 首先是开发中的23中设计模式分为三大类:1.创建型 2.结构型 3.行为型 (i ...
- iOS开发中常见的语句@synthesize obj = _obj 的意义详解
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- iOS开发中常见的语句@synthesize obj=obj的意义详解
我们在进行iOS开发时,经常会在类的声明部分看见类似于@synthesize window=_window; 的语句,那么,这个window是什么,_ window又是什么,两个东西分别怎么用,这是一 ...
- iOS开发中常见bug!(内附解答方法)
序言 你是否曾经修复了一个 bug ,随后又发现了一个跟刚修复 bug 有关的 bug ,又或是修复 bug 的方式引起了另一个 bug ? 然而这些问题是绝佳的学习机会.所以我们怎样尽可能多地从修复 ...
- iOS开发中常见的问题
1.重复调用2次loadView和viewDidLoad 最好不要在UIViewController的loadView方法中改变状态栏的可视性(比如状态栏由显示变为隐藏.或者由隐藏变为显示),因为 ...
- 转载iOS开发中常见的警告及错误
iOS警告收录及科学快速的消除方法 前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作. ...
- iOS 开发中常见的崩溃错误
1.duplicate symbols for architecture armv7 1.首先排查是否有名字重复的文件: 2.检查是否在#import头文件的时候,不小心把.h写成了.m. 2 ...
- 深入理解 iOS 开发中的锁
来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...
- iOS开发系列-常见离线存储方式
概述 在很多社交App手机在手机没有网络时,重新启动应用,依然能否展示上次访问的数据,提高用户体验,这个就是离线数据存储的运用场景.在iOS开发中常见的离线存储技术有Plist存储.个人偏好存储.解归 ...
随机推荐
- POJ 2942 圆桌骑士
之前做过这个题目,现在回想起来,又有新的柑橘. 求必须出去的骑士人数. 每一个双连通分量,如果是一个奇圈,那么一定是二分图染色失败. 依次遍历每个双连通分量,但是,对于邻接表中,有一些点不是双连通分量 ...
- 【[COCI2011-2012#5] POPLOCAVANJE】
据说这道题卡空间? 不存在的,拿\(AC\)自动机去存\(5000\times5000\)的串肯定是要M的 我们可以考虑对长度为\(n\)的串建一个\(SAM\),这样空间就只需要两倍的\(3e5\) ...
- 【[SCOI2007]修车】
题目 只能做网络流度日了 当然是要对每个修车的人拆点,把每个人拆成\(n\)个点用于接收不同时刻的车 每个车\(i\)向每个时刻\(k\)的人\(j\)连边,边权为\(t[i][j]*k\)这样就是这 ...
- AFN 切换BaseUrl
在某个特定的接口需要修改baseurl时: 直接使用kvc: [_sessionManager setValue:[NSURL URLWithString:NEW_BASE_URL] forKey:@ ...
- POJ 2976 Dropping tests 【01分数规划+二分】
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- highcharts(前端报表生成)
前端报表技术:使用 JavaScript 生成漂亮图表 百度 echarts: http://echarts.baidu.com/examples.html Funsioncharts : http: ...
- android:TableLayout表格布局详解
http://blog.csdn.net/justoneroad/article/details/6835915 这篇博文包括的内容:1.TableLayout简介2.TableLayout行列数的确 ...
- Linux 下的多线程编程(1)
#include<stdio.h> #include<pthread.h> #include<string.h> #include<sys/time.h> ...
- html、css和js原生写一个模态弹出框,顺便解决父元素半透明子元素不透明效果
模态框: html部分: <!-- 按钮 --> <button id="box" onclick="pop_box()">弹出框< ...
- CRS
CRS是集群就绪服务(cluster ready service)的简称,主要负责集群中的资源管理以及OCR管理.为了与10gR2集群管理软件名称crs区分,这里用CRSD代替CRS.相关概念:--资 ...