Я опытный разработчик, который является новичком в разработке iOS (в частности, для iPhone). В проекте, над которым я работаю, используется автоматический подсчет ссылок (ARC).
Я проводил некоторые исследования в области ARC и наткнулся на этот документ: http://clang.llvm.org/docs/AutomaticReferenceCounting.html, а в разделе под заголовком «Сохраненные возвращаемые значения» говорится, что атрибут может использоваться для указания того, что вызывающий объект ожидает вступления во владение. +1 сохранить счет. Далее также утверждается, что ARC автоматически добавит атрибут к методам, если обнаружит, что он принадлежит к определенным семействам методов (в частности, к именам: alloc, copy, init, mutableCopy и new)
Из дальнейшего чтения кажется, что семейства методов - это просто соглашения о присвоении имен методам. Насколько я понимаю, если имя метода начинается с семейства методов, то оно входит в это семейство методов. Так например
+(id) init
+(id) initWithName:(NSString*)name
являются частью семейства методов init.
Мой вопрос: Существует ли формальный список определенных семейств методов для разработки под iOS, и если да, то где они / где я могу его найти?
ниже находится раздел llvm.org, о котором я упоминал выше:
Раздел 3.2.2: Состояния возвращаемых значений:
Функция или метод, который возвращает тип указателя сохраняемого объекта
может быть помечен как возвращающий оставшееся значение, означающее, что
вызывающий ожидает получить право владения +1 удерживать счет. Это сделано
добавление атрибута ns_returns_retained в функцию или метод
декларация, вот так:
id foo (void) __attribute ((ns_returns_retained));
- (id) foo __attribute ((ns_returns_retained)); Этот атрибут является частью типа функции или метода.
При возврате из такой функции или метода ARC сохраняет значение
в точке оценки заявления о возврате, прежде чем оставить все
локальные области применения.
При получении результата возврата от такой функции или метода, ARC
освобождает значение в конце полного выражения, которое оно содержит
в пределах, при условии обычной оптимизации для локальных значений.
Обоснование: это формализует прямую передачу права собственности от вызываемой стороны
звонящему. Наиболее распространенным сценарием этой модели является сохранение
возврат из методов init, alloc, new и copy, но есть и другие
случаи в рамках. После оптимизации обычно нет
требуется дополнительное удержание и освобождение.
Методы в alloc, copy, init, mutableCopy и новых семействах
неявно помеченный атрибут ((ns_returns_retained)). Это может быть
подавляется путем явной маркировки метода
атрибут ((ns_returns_not_retained)).
Это неопределенное поведение, если метод, которому передается сообщение Objective-C
отправка статически решает имеет различную семантику сохранения в результате
из метода, который он динамически разрешает в. Это неопределенное поведение
если вызов блока или функции выполняется через статический тип с
по-разному сохраняют семантику по своему результату от реализации
вызываемый блок или функция.
Обоснование: несоответствие с возвращенными результатами приведет к перерасходу или
перерасходы, в зависимости от направления. Опять правило о
вызовы функций - это на самом деле приложение существующего C / C ++
правило о вызове функций через несовместимый тип функции.