Разница между типом и пожизненными квалификаторами - PullRequest
3 голосов
/ 31 октября 2011

В Objective-C или на любом другом языке, который применяется?

Полагаю, я действительно спрашиваю, одинаковы ли __weak и const с точки зрения классификации? Могу ли я поменять местами типы терминов и квалификаторы, когда я говорю о __weak, const и т. Д.?

Ответы [ 2 ]

5 голосов
/ 31 октября 2011

В Си спецификатор типа прикрепляет качество (атрибут, свойство) к данному типу. Существует три квалификатора типа: const (только для чтения, без записи), volatile (без кэша) и restrict (без псевдонима).

Автоматический подсчет ссылок (для Objective-C) добавляет четыре новых квалификатора типа: __autoreleasing, __strong, __unsafe_unretained и __weak. Из-за природы ARC - а именно, автоматизации управления памятью - эти четыре квалификатора типа прикрепляют атрибуты, связанные с владением.

Полагаю, на самом деле я спрашиваю, являются ли __weak и const одинаковыми с точки зрения классификации?

Они оба являются классификаторами типов, но только __weak является классификатором владения.

Могу ли я поменять местами термины «тип» и «пожизненные», когда я говорю о __weak, const и т. Д.?

Нет, они не взаимозаменяемы. Все перечисленные выше квалификаторы являются классификаторами типов, но только четыре квалификатора, представленные ARC, являются и квалификаторами владения.

Обратите внимание, что в проекте LLVM используется номинал квалификаторов владения , тогда как Apple , похоже, вместо этого использует квалификаторов времени жизни .

0 голосов
/ 31 октября 2011

const указывает, что объект не может быть изменен в течение его жизненного цикла.

__ слабый означает, что ссылка на объект не увеличивает счетчик ссылок, когда вы используете ARC, это полезно для объектов, которыми вы не владеете или не хотите увеличивать счетчик ссылок, например, циклический счетчик ссылок. strong будет значением по умолчанию и подразумевает изменение количества ссылок.

...