Комментарии 18
В таком виде очень маловероятно. Добавьте комментариев в код.
if (delegate != nil) {
[delegate appImageDidLoad:image index:index]; // Вызываем метод делегата
}
Рантайм сам проверит что указатель не nil, лишняя проверка ни к чему.
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"images.jpeg"]];
А тут утечка памяти. Хоть бы код через анализатор прогнали перед постом ;)
Ну и небольшой PS: для загрузки картинок отлично подходит EGOImageLoading, советую.
Добавил изменения в код. Спасибо за конструктивные замечания.
По поводу EGOImageLoading — возможно хорошая штука, но есть пару моментов.
Асинхронная загрузка достаточно простая вещь и, для меня, не всегда виден смысл в использовании каких-то сторонних библиотек. Второе — лицензионные соображения. Эта библиотека распространяется по лицензии MIT, что может просто не подойти для какого-то проекта.
По поводу EGOImageLoading — возможно хорошая штука, но есть пару моментов.
Асинхронная загрузка достаточно простая вещь и, для меня, не всегда виден смысл в использовании каких-то сторонних библиотек. Второе — лицензионные соображения. Эта библиотека распространяется по лицензии MIT, что может просто не подойти для какого-то проекта.
Если делегат не задан, то будет утечка памяти здесь:
А тут:
можно компактнее написать так:
activeDownloadData = nil;
NSLog(@"Can't find delegate for ImageLoader");
А тут:
activeDownloadData = [[NSMutableData data] retain]; // Важный момент - сделать retain
можно компактнее написать так:
activeDownloadData = [NSMutableData new];
У меня в приложении используется нечто подобное. Создаётся впечатление, что на iPad, на прошивке iOS 4.2 и выше загрузка выполняется таки синхронно. При том, что код нормально работает на iOS 3.2. Соответственно приходится извращаться с sendSynchronousRequest и NSThread. Что, в свою очередь, крайне криво работает в iOS 3.2.
В наших проектах это делается приблизительно так:
//ассинхронная подгрузка данных по URL
JFFAsyncOperation loader_ = dataURLResponseLoader( url_ );
//ассинхронная подгрузка и кеширование в проперти NSMutableDictionary с именем images
JFFPropertyPath* property_path_ = [ JFFPropertyPath propertyPathWithName: @"images" key: url_ ]
loader_ = [ self asyncOperationForPropertyWithPath: property_path_ asyncOperation: loader_ ];
//пример использования
[ self.activityIndicatorView startAnimating ];
loader_( nil, nil, ^( id result_, NSError* error_ )
{
self.imageView.image = result_;
[ self.activityIndicatorView stopAnimating ];
} );
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Асинхронная загрузка в iOS