Consider this code:

```
NSMutableArray *array = [[NSMutableArray alloc]init];
for(int i = 0; i < 5 ; i++) 
    [array addObject:[[NSDictionary alloc]init]];
NSString *poisonedString = [array objectAtIndex:0];

```

In this above snippet, I have an array and I am inserting some dictionary objects into this array. While all this is fine and dandy, when I get the dictionary object from the array and put it into an string object, it is not causing any cast exceptions! The program runs smoothly and then crashes only when we do dictionary operations on the `poisonedString`! Why is this so? Why doesn't the Objective-C runtime see the type mismatch and raise an exception at the assignment, when the dictionary object is put into `poisonedString`?