Подтвердить что ты не робот

Следует ли использовать instancetype для методов alloc/new/init?

В соответствии с clang documentation метод, возвращающий id, неявно известен, возвращает instancetype, когда это метод класса, начинающийся с new или alloc, или метод экземпляра, начинающийся с retain, autorelease, init или self.

Чтобы согласованность, должны ли эти методы также быть записаны для явного возврата instancetype в новый код?

- (instancetype)init {
    self = [super init];
    if (self) {
        // perform initialization
    }
    return self;
}

Есть ли какая-либо документация о том, почему или почему нет, или какие-либо рассуждения? Кажется, что в этом случае он точно интерпретировал компилятор.

4b9b3361

Ответ 1

На самом деле это не обязательно, потому что компилятор автоматически продвигает такие методы для возврата instancetype, эффективно (как вы сказали).

Этот автоматический вывод задокументирован в документации llvm.

Лично? Я всегда объявляю их как instancetype явно, потому что он точно описывает контракт, и это упрощает рефакторинг позже.