objc有什么区别?

我一直在使用XCode的一个有用的技巧是在异常中添加断点。

我想知道为什么我们需要添加两个断点 - 一个用于objc_exception_throw ,一个用于[NSException raise]

一个人覆盖另一个人没有的情况?


您应该只在objc_exception_throw上使用断点。 该方法-[NSException raise]调用objc_exception_throw ,因此objc_exception_throw涵盖了-[NSException raise]覆盖的所有情况。 另一种方式是不正确的:编译@throw指令直接调用objc_exception_throw 。 该方法显示了不同之处:

- (void)throwAndCatch
{
    @try {
        NSException *exception = [[NSException alloc] initWithName:@"Test" 
                                                            reason:@"test" 
                                                          userInfo:nil];
        @throw exception;
    }
    @catch (NSException *exception) {
        NSLog(@"Caught");
    }
}

调用-throwAndCatch-[NSException raise]上的断点不起作用,而objc_exception_throw上的断点将起作用。


以下是Apple关于例外的文档:

@throw和raise之间的一个重要区别是后者只能发送到一个NSException对象,而@throw可以接受其他类型的对象作为它的参数(比如字符串对象)。 可可应用程序应该@只抛出NSException对象。

这意味着如果你正在实施一个Cocoa applciation project ,并且你严格遵循@throw,那么只有NSExeption对象是相同的。

参考:链接

链接地址: http://www.djcxy.com/p/60597.html

上一篇: What's the difference between objc

下一篇: C++ Templates: Partial Template Specifications and Friend Classes