Сохранение UITouch: разрешено или нет?

Вот цитата из документацииUITouch:

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

А вот еще одно из Руководства по обработке событий для приложений UIKit:

В листинге 9-1 показана основная реализация класса TouchableView и его методов обработки касаний. Каждый метод проходит через касания и выполняет необходимые действия. Словарь touchViews использует объекты UITouch в качестве ключей для получения подвидов, которыми манипулируют на экране.

class TouchableView: UIView {
    var touchViews = [UITouch:TouchSpotView]()
    ...
}

Очевидно, что они нарушают свои собственные правила, используя UITouch экземпляры как словарные ключи...

Так в чем же дело? Следует ли сохранить UITouch экземпляры для сложного отслеживания жестов или нет?

2 ответа

Я подал в Apple отчет об ошибке относительно несоответствия между примером кода и документацией UITouch. В результате параграф "Никогда не сохранять сенсорный объект при обработке события" был удален из документации UITouch. Поскольку пример кода сохраняет объекты UITouch, мы можем предположить, что это разрешено.

Разработчики Apple не совершенны, и да, я бы согласился, что они нарушают свои собственные правила. Точно так же Apple говорит, что вы не должны создавать подклассы представлений коллекций, но я делал это раньше, чтобы добавить некоторые второстепенные служебные функции без каких-либо неблагоприятных последствий. Я бы сказал, что это следует отнести к аналогичной категории "не делай этого". Если они сказали, не делайте этого, вы делаете это на свой страх и риск. Но на самом деле, поскольку было бы так легко создавать прокси-записи NSTouch, почему бы не сделать это в любом случае? По той же причине я закончил тем, что "разложил" свои служебные функции представления коллекции на другой служебный класс, просто потому, что я анальный и хотел быть уверен, что я в безопасности;)

Другие вопросы по тегам