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