Подтвердить что ты не робот

UIGestureRecognizer вызывает круговое сохранение?

Я думал, если вы назначите цель как self в методе распознавания жестов initWithTarget:action:, вы вызовете круговое сохранение? Так как self сохранит распознаватель в self.gestureRecognizers, и, возможно, распознаватель жеста также сохранит self в initWithTarget:action.

Будет ли это решение для него?

__weak VRDrawer* weakSelf = self;
UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:weakSelf
                                                                      action:@selector(handleTap:)];
4b9b3361

Ответ 1

Я полностью понимаю, что подтверждение чего-то с отсутствием документации может чувствовать беспокойство. Важно отметить, что за более чем десятилетие соглашения отношения целевого действия никогда не strong. Здесь соответствующие документы. Обратите внимание на часть, которая гласит:

Объекты управления не (и не должны) сохраняют свои цели.

"Сохранить..." в режиме MRC: "Удерживает ссылку strong для..."

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


P.S. Вам не нужно беспокоиться о примечании, которое относится к элементам управления, сохраняющим цели в средах, управляемых памятью. "Управление памятью" относится к коллекции (теперь лишенной) мусора в Cocoa. Ни MRC, ни ARC не управляются с помощью памяти.

Ответ 2

UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

Это не сохраняет себя. Это также было бы в документах

Вам нужно добавить распознаватель в представление. Это мнение сохранит распознаватель. нет цикла сохранения.

[aView addGestureRecognizer:tapRec];

addGestureRecognizer: docs упоминают, что в представлении сохраняется распознаватель


поскольку вы используете ARC, это все, что вам нужно сделать

UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[aView addGestureRecognizer:tapRec];