1

我创建了一个宏,如果在调试模式下编译,它将检查以确保该方法已被具有相同名称的子类调用(以阻止外部类调用它)。如果不是这种情况,它将抛出异常:

#ifdef DEBUG

#define CHECK_INHERITANCE() \
do { \
    NSString *this = [NSThread callStackSymbols][0]; \
    NSString *parent = [NSThread callStackSymbols][1]; \
    NSError *error = NULL; \
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[\\w+ ((\\w+:)+)\\]" options:NSRegularExpressionCaseInsensitive error:&error]; \
    NSTextCheckingResult *resultThis = [regex firstMatchInString:this options:0 range:NSMakeRange(0, this.length)]; \
    NSString *strThis = [this substringWithRange:[resultThis rangeAtIndex:1]]; \
    NSTextCheckingResult *resultParent = [regex firstMatchInString:parent options:0 range:NSMakeRange(0, parent.length)]; \
    NSString *strParent = [parent substringWithRange:[resultParent rangeAtIndex:1]]; \
    if(![strThis isEqualToString:strParent]) [NSException raise:NSGenericException format:@"Must be called from a subclass"]; \
} while (0);

#else

#define CHECK_INHERITANCE() //

#endif

我对其进行了测试并且它可以工作,但是NSException它抛出的并没有给我任何暗示它为什么崩溃的堆栈跟踪,也没有显示消息“必须从子类调用”。我只是0 __kill在主线程和一堆汇编程序上得到“”。我怎样才能让它给我一个更有用的异常?我做错了吗?

4

0 回答 0