Ответ 1
UPDATE
Начиная с iOS 7, Apple использует instancetype
как возвращаемый тип для большинства фреймворческих API-интерфейсов Foundation (и других фреймворков), так что теперь, например, +date
of NSDate
имеет следующую подпись:
+ (instancetype)date
Я просто написал короткую статью об этом.
Оригинальный ответ
Конструкторы и методы factory возвращают id
, чтобы позволить подклассам использовать их без ovverriding.
Представьте, что у вас есть подкласс NSDate
, называемый NSMutableDate
.
Если вы вызываете
[NSMutableDate date]
теперь вы ожидаете вернуть объект NSMutableDate *
, но если date
возвращал NSDate *
, вам пришлось бы переопределить этот метод, изменяя тип возвращаемого значения.
Использование id
допускает такую гибкость.
На самом деле компилятор clang имеет ключевое слово instancetype
, которое пригодится, если вы определяете свои собственные методы factory.
Недавно я говорил об этой конкретной проблеме здесь.