Я установил категорию Objective-C для класса UIImageView приложения для iPhone. Задача этой категории - помочь асинхронно загружать изображения на основе URL с помощью кэширования памяти / диска.
Теперь в UIImageView + Cache.m у меня есть доступ к NSOperationQueue , так что я могу запустить поток загрузки. Я создаю NSOperation -приведенный объект, инициализированный URL-адресом изображения и целевым UIImageView, а также селектор для выполнения на цели после завершения операции. В методе селектора мы устанавливаем наше недавно загруженное изображение (или, если не найдено, мы устанавливаем альтернативное изображение-заполнитель), и все готово!
Это работает нормально, пока UIImageView не будет удален до NSOperation завершается. Например, у меня есть предыдущий / следующий сегментированный элемент управления в моем пользовательском интерфейсе, который заставляет эти UIImageViews быть удалены и добавлены заново (они являются частью более крупного «элемента», который просматривается в приложении), поэтому его очень легко нажать они в быстрой последовательности.
Так что, если вы решите начать стучать до загрузки всех изображений - KABLAM! Несчастная нить имеет недопустимый объект и не знает его. (
Самым близким, что я могу найти, чтобы помочь смягчить это, являются методы cancel и isCancelled NSOperation, за исключением того, что вы не можете отследить, какой объект операции следует отменить в пределах категории, поскольку - если я правильно понимаю - Категории не могут добавлять IVAR к объектам!
Может быть, это означает, что категории здесь не очень хорошая идея? (Скулит: «Но я живу в категориях! Вааааа!» )
Совет приветствуется!