Привет, я нахожу способ обеспечить проверку типов во время выполнения или подобные вещи в 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, поэтому я не уверен, что это правильный путь ...
Было действительно трудно понять, почему нет ошибки компиляции или времени выполнения. Но я понимаю это как естественное правило в реальном мире Си. Но более строгая проверка типов мне очень поможет. Даже только в сеансе отладки. Есть ли способ сделать это?
И если нет проверки типов во время выполнения, какую стратегию кодирования и отладки я должен использовать для неверно типизированных значений? И в чем заключается компромисс между проверкой типов во время выполнения или нет?