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

简介: @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 {

        }
    }

}
目录
相关文章
|
4月前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
97 0
|
前端开发
前端学习案例4-object.assign的应用
前端学习案例4-object.assign的应用
70 0
前端学习案例4-object.assign的应用
|
前端开发
前端学习案例5-object.assign的应用
前端学习案例5-object.assign的应用
63 0
前端学习案例5-object.assign的应用
|
前端开发
前端学习案例6-object.assign的应用
前端学习案例6-object.assign的应用
57 0
前端学习案例6-object.assign的应用
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
112 0
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
|
Web App开发 API C#
Pywinauto 应用后端类型选择错误:AttributeError: ‘NoneType‘ object has no attribute ‘backend‘. 原因及解决办法
Pywinauto 应用后端类型选择错误:AttributeError: ‘NoneType‘ object has no attribute ‘backend‘. 原因及解决办法
376 0
Pywinauto 应用后端类型选择错误:AttributeError: ‘NoneType‘ object has no attribute ‘backend‘. 原因及解决办法
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
444 0
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
|
13天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
54 4
|
1月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。