我有一个敏感的方法,用数字和数组进行操作。有一次我有这样的事情:
@try {
CGFloat value = [myArray[index] floatValue];
...
@catch (NSException *exception) {
[self doSomething];
}
@finally {
}
如果index是负值或myArray范围之外的值,我想要抛出异常,或者换句话说,我希望@catch运行,但它不起作用,应用程序只是在这样的条件下崩溃发生。
是的,我知道我可以使用if
来测试整个事情,但我试图避免使用if
(不要问我为什么)。
为什么以及如何解决这个问题?
答案 0 :(得分:2)
它崩溃了,因为有问题的数组没有范围检查索引。只有某些类型的“托管”数组会检查索引。例如,NSArray将抛出NSRangeException。常规的C数组如int myarr [5]不会。
答案 1 :(得分:1)
当您访问内置数组范围之外的元素时,Objective-C不会引发异常;它仍然是未定义的行为 - 即它在“普通”C中的方式。
使用NSArray
代替“普通C”数组将解决问题:
NSArray *myArray = @[@1, @3, @20];
@try {
CGFloat value = [myArray[index] floatValue];
...
@catch (NSException *exception) {
[self doSomething];
}
@finally {
}
答案 2 :(得分:0)
好吧,我尝试了以下内容并成功获得了“例外!”打印出来。
NSInteger i = -1;
NSArray *array = @[];
@try {
CGFloat value = [array[i] floatValue];
}
@catch (NSException *e) {
NSLog(@"exception!");
}
你正在做的事情显然有些不对(你没有提出你的问题)。