@try{}@catch (NSException *exception) {}在object c中的应用及问题

大家发现了没有:在java代码中经常看到异常捕获,来避免应用异常并且定位问题,给出错误提示,而在苹果开发中基本很少见到@try{}@catch (NSException *exception) {}。
苹果代码若是捕获到异常也处于癌症晚期了,它仍旧会崩溃的。甚至你不加@try{}@catch (NSException *exception) {}时,它好好的加了,它就crash了。它真是一鸡肋功能啊!一定要慎加。
但是它真的那么无用,也不竟然。我在做曹操司机端时,就遇到一个司机找到我们,说他的手机,装上曹操司机端应用起不来。我测试自己的手机没有问题啊!我定位很可能和手机有关。就让他找到我,把他的手机连接XCODE,在线调试,发现应用启动时死在这一句代码上:

[_locationManager requestAlwaysAuthorization];

他的手机时iPhone 4s,操作系统是8.0。
后来赶紧定位,以前在iOS7上我也遇到过调用这段代码崩溃过:

            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"请在设置中授权曹操专车使用GPS定位服务!" message:nil delegate:self cancelButtonTitle:@"设置" otherButtonTitles:nil, nil];
            alertView.tag =111;
//            @try
//            {
                [alertView show];
//            }
//            @catch (NSException *exception) {
//            }

我立即给它加上这个异常捕获,结果再运行,ok了。可以看到它也不全是废物。
//如果没有授权则请求用户授权
AppDelegate.m文件:

    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined)
    {
        @try
        {
            if (IOS_VERSION_LARGE_OR_EQUAL(8.0))
            {
                [_locationManager requestAlwaysAuthorization];
            }
        }
        @catch (NSException *exception) {
        }

    }

可见对弹出框加上异常有备无患。

而对文件操作,按照我以前写Vc的常用写法,对读取文件进行异常捕获,结果给它一个非法文件路径,它直接crash了,把异常捕获去掉,它虽然读到的是个nil,但是不至于崩溃啊!所以要慎加异常捕获,不能一概而论,画蛇添足的事情还是不要做的为好!

+ (BOOL)storageImageWithFilePath:(NSString *)filePath
                           image:(UIImage *)image
{
    if(!filePath || ![filePath isKindOfClass:[NSString class]])
    {
        return NO;
    }
    if(!image || ![image isKindOfClass:[UIImage class]])
    {
        return NO;
    }
    //    NSFileManager* fm = [NSFileManager defaultManager];
    //    if([fm  fileExistsAtPath:filePath])
    {
        @try {
            NSData *imageData = UIImagePNGRepresentation(image);
            [imageData writeToFile:filePath atomically:YES];
            return YES;
        } @catch (NSException *exception) {
            NSLog(@"ImageCache save image error:%@", exception);
            return NO;
        } @finally {

        }
    }

}

猜你喜欢

转载自blog.csdn.net/jia12216/article/details/82705190