В Си спецификатор типа прикрепляет качество (атрибут, свойство) к данному типу. Существует три квалификатора типа: const
(только для чтения, без записи), volatile
(без кэша) и restrict
(без псевдонима).
Автоматический подсчет ссылок (для Objective-C) добавляет четыре новых квалификатора типа: __autoreleasing
, __strong
, __unsafe_unretained
и __weak
. Из-за природы ARC - а именно, автоматизации управления памятью - эти четыре квалификатора типа прикрепляют атрибуты, связанные с владением.
Полагаю, на самом деле я спрашиваю, являются ли __weak
и const
одинаковыми с точки зрения классификации?
Они оба являются классификаторами типов, но только __weak
является классификатором владения.
Могу ли я поменять местами термины «тип» и «пожизненные», когда я говорю о __weak
, const
и т. Д.?
Нет, они не взаимозаменяемы. Все перечисленные выше квалификаторы являются классификаторами типов, но только четыре квалификатора, представленные ARC, являются и квалификаторами владения.
Обратите внимание, что в проекте LLVM используется номинал квалификаторов владения , тогда как Apple , похоже, вместо этого использует квалификаторов времени жизни .