Что означает * ___ сильный *?

objective-c

1428 просмотра

2 ответа

Есть метод:

- (void)doSmth:(NSString *__strong*)str {
    NSLog(@"%@", *str);
}

Что это значит, когда __strong следует классу параметра метода? Почему там две звездочки?

Автор: Gikas Источник Размещён: 08.11.2019 11:09

Ответы (2)


6 плюса

Решение

Две звездочки означают, что это указатель на указатель.

__strongпротивоположность __weakкоторой вы, вероятно, уже знаете. Это означает, что мы говорим о сильной ссылке здесь. Пока мы придерживаемся этой ссылки, объект не будет освобожден.

Также нам нужно знать, что написание __strong Type *varNameявляется технически неправильным (хотя оно работает, и почти все используют его). Правильный синтаксис есть Type * __strong varName.

Ваш синтаксис является указателем на сильную ссылку на NSString. Это означает, что когда объект возвращается из метода, должен быть releaseвызов из ARC для правильного освобождения этого объекта.

Пожалуйста, смотрите соответствующий вопрос: NSError и __autoreleasing и официальная документация: переход на ARC

Автор: Sulthan Размещён: 20.08.2016 10:36

1 плюс

Хотя на этот вопрос уже есть ответ, но люди должны знать точные слова или простое описание.

__strong

Объект остается «живым» до тех пор, пока на него есть сильный указатель.

Когда объект назначен этому указателю, он сохраняется до тех пор, пока этот указатель ссылается на него

Когда вы хотите убедиться, что объект, на который вы ссылаетесь, не освобожден, пока вы все еще используете его.

Выше точки имеют значение __strong.

Лучший пример __strong от BJ Homer

Здесь собака - это объект, и эта собака хочет убежать (быть освобожденной).

Сильные указатели похожи на поводок на собаку. Пока у вас есть поводок, привязанный к собаке, собака не убежит. Если пять человек прикрепят поводок к одной собаке (пять сильных указателей на один объект), то собака не убежит, пока все пять поводков не отсоединятся.

Слабые указатели, с другой стороны, похожи на маленьких детей, указывающих на собаку и говорящих "Смотри! Собака!" Пока собака все еще на поводке, маленькие дети все еще могут видеть собаку, и они все еще будут указывать на нее. Однако, как только поводки отстегнуты, собака убегает независимо от того, сколько на нее указывают маленькие дети.

Как только последний сильный указатель (поводок) больше не указывает на объект, объект будет освобожден, а все слабые указатели будут обнулены.

Две звездочки

Это указатель на указатель

Если вы используете указатель на указатель, вы должны поступить так, как сказал Султан, когда объект возвращается из метода, для надлежащего освобождения этого объекта должен быть выполнен вызов освобождения из ARC. Таким образом, мы должны знать способ использования указателя на указатель

Вот способ для обработки указателя на проблемы владения указателем

Автор: user3182143 Размещён: 20.08.2016 01:06
Вопросы из категории :
32x32