Почему заголовки Apple не имеют параметров __autoreleasing для NSError**?

Почему методы Apple, принимающие NSError**, не объявлены как NSError * __autoreleasing *?

Примечания к выпуску ARC кажется, предполагает, что они должны быть (?).

Например, все подпрограммы в NSFileManager.h. Но на самом деле я не вижу каких-либо заголовков Apple, использующих то, что указано в Примечаниях к выпуску перехода на ARC:

and the method declaration would typically be:

-(BOOL)performOperationWithError:(NSError * __autoreleasing *)error;

Может ли это быть из-за поддержки устаревших баз кода, где все объявления NSError * error = nil; будут подразумевать strong, и поэтому, если Apple поместит туда __autoreleasing, это приведет к тому, что временная локальная переменная __autoreleasing будет создаваться каждый раз? Единственное, о чем я могу думать.


person Dad    schedule 20.02.2013    source источник


Ответы (1)


Двойные указатели на объекты Objective-C неявно __autoreleasing указаны в спецификации LLVM.

person CodaFi    schedule 20.02.2013
comment
Интересная ссылка на документацию! Похоже, это не соответствует тому, что говорится в документе «Примечания к выпуску перехода на ARC», где подразумевается, что будет создана временная переменная с соответствующим типом хранения. ?? - person Dad; 20.02.2013
comment
@Dad Эти переменные создаются компилятором для обратной записи, они не влияют на квалификаторы хранения второго указателя. - person CodaFi; 20.02.2013
comment
Документ, на который вы ссылаетесь, совершенно ясен. Я подал запрос на разъяснение документации для документа «Примечания к выпуску перехода на ARC», поскольку он сбивает с толку, как написано, если сравнивать с заголовками Apple. Спасибо за вашу помощь! - person Dad; 20.02.2013
comment
Поэтому я предполагаю, что объявление локальной переменной как __autoreleasing спасет компилятор (и тогда зарегистрирует локальную переменную). NSError __autoreleasing * error = nil; [foo methodWithError: &error]; потому что в противном случае спецификация LLVM и примечания к выпуску Transitioning To ARC предполагают, что он создаст эту временную переменную. Верно? - person Dad; 20.02.2013
comment
@Dad Не стоит этого делать. Позвольте компилятору обрабатывать квалификаторы хранения за вас. В любом случае несерьезно так оптимизировать. - person CodaFi; 20.02.2013
comment
ха! :) Думаю, я показываю свой возраст - трата регистров на написание неряшливого кода была осуждена в те дни ... Вы, вероятно, правы, что сейчас это не имеет значения в большинстве ситуаций. - person Dad; 20.02.2013
comment
Документ Transitioning To ARC довольно старый и не особенно авторитетный. Возможно, поведение Clang действительно изменилось в этом вопросе с момента его написания. @Папа - person jscs; 20.02.2013
comment
@JoshCaswell На самом деле, похоже, на developer.apple.com нет ничего более нового или более определенного ...? Расширенное управление памятью developer.apple.com/ library/mac/#documentation/Cocoa/Conceptual/ просто указывает на этот документ TTARN. - person Dad; 20.02.2013
comment
@Dad: Вот что я имею в виду; документы Apple отстают от документов Clang (хотя последний вполне мог быть написан кем-то из Apple). - person jscs; 21.02.2013
comment
@JoshCaswell а. в порядке. Спасибо. - person Dad; 21.02.2013