В большинстве случаев это не нужно, поскольку LLVM & Clang знает соглашения об именах ObjC. Поэтому, если вы следуете стандартным соглашениям об именах Какао, LLVM автоматически предполагает соблюдение соответствующей политики семейства / возврата памяти.
А именно, если вы объявите метод с именем initWith...
, он автоматически будет рассматривать его как семейство методов init, нет необходимости указывать __attribute__((objc_method_family(init)))
, Clang автоматически обнаружит его; то же самое для семьи new
и т. д.
Фактически, вам нужно использовать спецификаторы __attribute__
только тогда, когда Clang не может угадать такие случаи, что на практике встречается редко (на практике мне никогда не приходилось это использовать), или только если вы не уважаете именование условные обозначения:
Цитирование Документация по языкам Clang :
Многие методы в Objective-C имеют общепринятые значения, определяемые их селекторами. Для целей статического анализа иногда полезно иметь возможность пометить метод как , имеющий конкретное общепринятое значение, несмотря на отсутствие правильного селектора , или не имеющий общепринятого значения, предложенного его селектором. Для этих случаев использования мы предоставляем атрибут, специально описывающий семейство методов, к которому принадлежит метод.
Так что, как только вы соблюдаете соглашения об именах (что вы всегда должны делать), вам больше нечего делать.