It isn't actually necessary because the compiler automatically promotes such methods to returning instancetype
, effectively (as you stated).
This automatic inference is documented in the llvm documentation.
Personally? I always declare them as instancetype
explicitly because it exactly describes the contract and it makes for easier refactoring later.