Вы делаете синхронный вызов для получения данных изображения. Это означает, что в течение этого периода ваш основной поток (поток пользовательского интерфейса) будет оставаться заблокированным (при условии, что он не вызывается из потока, что, как я полагаю, не происходит при обновлении пользовательского интерфейса, который всегда должен быть в основном потоке пользовательского интерфейса. По сути, это означает, что вы не можете делать что-либо до тех пор, пока вызов не вернется. Вы можете использовать асинхронный (неблокирующий способ сделать это. Один пример с использованием Grand Central Dispatch (GCD)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
// This runs in background
NSData *imgData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:imgURL]];
UIImage *image = [[UIImage alloc] initWithData:imgData];
dispatch_async(dispatch_get_main_queue(), ^{
//This block runs on main thread, so update UI
UIImageView *userImage =[[UIImageView alloc] initWithFrame:CGRectMake(20,size,userImageSize,userImageSize)];
userImage.image = image;
});
});
Или проверьте API, такой как sendAsynchronousRequest: queue: завершениеHandler в NSURLConnection