I develop in objective-c for a couple years now, but never faced something like this. I'd like to know if someone have an explanation why this is possible, look:

```
NSNumber *number = [NSNumber numberWithDouble:1.23413];
NSDictionary *dicTest = @{ @"number": number };
NSString *string = [dicTest valueForKey:@"number"];

NSLog(@"Is string? %d", [string isKindOfClass:[NSString class]]);
NSLog(@"Is number? %d", [string isKindOfClass:[NSNumber class]]);

```

The debugger says that the type of the variable is:

```
string  __NSCFNumber *  (double)1.23413 0x000060c000222ae0

```

How this is possible at runtime without crashing? Objective C isn't suposed to be typed?