@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 {

        }
    }

}
目录
相关文章
|
8月前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
232 0
|
前端开发
前端学习案例4-object.assign的应用
前端学习案例4-object.assign的应用
90 0
前端学习案例4-object.assign的应用
|
前端开发
前端学习案例5-object.assign的应用
前端学习案例5-object.assign的应用
92 0
前端学习案例5-object.assign的应用
|
前端开发
前端学习案例6-object.assign的应用
前端学习案例6-object.assign的应用
74 0
前端学习案例6-object.assign的应用
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
128 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‘. 原因及解决办法
401 0
Pywinauto 应用后端类型选择错误:AttributeError: ‘NoneType‘ object has no attribute ‘backend‘. 原因及解决办法
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
699 0
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
|
13天前
|
Java
课时78:Object类的基本概念
Object类的主要特点是可以解决参数的统一问题,使用object类可以接受所有的数据类型。 1. Object类简介 2. 观察Object类接收所有子类对象 3. 使用Object类接收数组
|
3月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。

热门文章

最新文章