嗨,我正在寻找一种方法来在 Cocoa 上的 Objective-C 中强制执行运行时类型检查或此类事情。
这是我的代码示例。我预计有关错误分配变量“b”的运行时错误。但事实并非如此。编译并执行,没有任何错误。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray* a = [NSArray arrayWithObject: @"TEST"];
NSURL* b = [a objectAtIndex:0];
NSLog(@"Is this URL? %i", [b isKindOfClass:NSURL.class]);
[pool drain];
return 0;
}
// Console log after program execution:
// 2010-01-11 10:25:02.948 Type Checking[98473:a0f] Is this URL? 0
我很惊讶没有运行时类型检查。因为我使用了所有高级语言,如 VB、C#、Java、ActionScript……我不懂 C 等低级语言,所以我不确定这是正确的方法……真的很难弄清楚为什么没有编译或运行时错误。但我开始将其理解为现实 C 世界中的自然规则。但是更强大的类型检查会对我有很大帮助。即使只在调试会话中。有没有办法做到这一点?
如果没有运行时类型检查,我必须使用什么样的编码和调试策略来处理错误的类型值?运行时类型检查之间的权衡是什么?