instancetype is a special type that can be returned from an Objective-C method. It specifies that the return is an object of the same type as the receiving class. In some cases, the compiler promotes an
id return to an instancetype: For instance, despite the definition of
[[NSString alloc] init], the compiler knows that it returns an
This is straight from Clang Language Extensions:
- the first word is “alloc” or “new”, and the method is a class method, or
- the first word is “autorelease”, “init”, “retain”, or “self”, and the method is an instance method.
Left unsaid is whether it’s better to actually specify
instancetype for these rather than rely on automatic promotion of
id. Most code I’ve seen relies on the automatic promotion. I’m not sure what combination this is of momentum, readability, compatibility and convention. I’ve kept to using
id in these cases, but that’s mostly due to momentum.
However, you should certainly use
instancetype if you want to specify that an instance of the receiving class is returned in cases where autopromotion doesn’t occur, such as a convenience factory.
For example, in this case:
MyObject *bar = [MyObject objectWithParameter: foo];
…you would want
MyObject to specify that
objectWithParameter returns an
instancetype rather than an
- Mattt Thompson: instancetype.