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