UIGestureRecognizer вызывает круговое сохранение?
Я думал, если вы назначите цель как self
в методе распознавания жестов initWithTarget:action:
, вы вызовете круговое сохранение? Так как self
сохранит распознаватель в self.gestureRecognizers
, и, возможно, распознаватель жеста также сохранит self в initWithTarget:action
.
Будет ли это решение для него?
__weak VRDrawer* weakSelf = self;
UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:weakSelf
action:@selector(handleTap:)];
Ответы
Ответ 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];