2015-12-02 2 views

ответ

1

Как вы знаете, Objective-C использует автоматическую систему подсчета ссылок (ARC) для управления памятью. Для того, чтобы это сработало, ему необходимо понять правила неявного владения для любого указателя, чтобы он знал, нужно ли устанавливать указатель, чтобы увеличить счетчик удержания для объекта.

ARC имеет разумные значения по умолчанию, так что если вы скажете:

CAShapeLayer *foo; 

Это предполагает, что вы хотите сильную ссылку. Таким образом, выше эквивалентно записи:

__strong CAShapeLayer *foo; 

Но если у вас есть указатель на указатель, он не может угадать, что правила собственности должно быть. Если вы хотите, ARC, чтобы увеличить количество ссылок вашего CAShapeLayer, когда указатель dot_p установлен, вы могли бы написать:

CAShapeLayer *__strong *dot_p; 

Если вы не хотите, чтобы увеличить сохранить кол вы могли бы написать:

CAShapeLayer *__weak *dot_p; 

или

CAShapeLayer *__unsafe_unretained *dot_p; 

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

Смежные вопросы