Переопределение NSObject и добавление переменной класса
Я использую следующий код для выполнения селектора после задержки с несколькими переданными параметрами:
http://nifty-box.com/blog/2006/12/nsinvocation-cleans-code.html
Это работает очень хорошо, но мне нужно расширить это, чтобы поддержать эквивалент:
[NSObject cancelPreviousPerformRequestsWithTarget: self]
(цель в этом случае не будет self, но я думаю, что это будет экземпляр _UFLatePerformer)
Есть ли способ сделать это, так что освобождение моего представления может убить все оставшиеся отложенные запросы производительности?
1 ответ
На Mac вы можете использовать objc_setAssociatedObject, но на iPhone его нет.
Поэтому в основном вам нужен какой-то управляющий синглтон, который хранит эти ссылки для вас, который вы передаете в NSObject, и он делает то, что вы хотите.
Когда я делал что-то подобное, я написал одноэлементный класс, который принимал запросы на выполнение действия, и запустил таймер, который срабатывал, когда действие должно было быть выполнено - в то время мой класс менеджера решил, был ли данный запрос все еще действительным, и если так выстрелил. Таким образом, я мог эффективно отменить таймер, и, кроме того, мог сказать менеджеру сбросить таймер, который на самом деле не был, он просто создал новый таймер, но когда старый таймер сработал, действие, которое ему было запрошено, было недействительным.
Таким образом, в основном таймер вызывал синглтон обратно с помощью только идентификатора запроса, что привело к появлению словарной записи, содержащей подробности вызова.