This is a compiler function. Everything that happens when you state, for example. NSArray<NSString *> *is that the compiler will then pretend what - addObject:(id)you have instead - addObject:(NSString *), generating the appropriate messages if you specify the wrong type of argument.
- Objective-C, . NSArray, , , . , .
, , NSArray. "" Apple , .