Пауза при конвертации из URL в uiimage - PullRequest
0 голосов
/ 11 марта 2012

У меня есть приложение, где я загружаю изображения.Я делаю это так:

NSString *imgURL = [@"http://www.kwikspik.com/static/" stringByAppendingString:spikFromTopic.user_image];
        NSData *imgData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:imgURL]];
        UIImage *image = [[UIImage alloc] initWithData:imgData];
        UIImageView *userImage =[[UIImageView alloc] initWithFrame:CGRectMake(20,size,userImageSize,userImageSize)];
        userImage.image = image;

Этот код реализован очень долго.

Проблема в подключении к интернету?или может быть в моем коде?

1 Ответ

0 голосов
/ 11 марта 2012

Вы делаете синхронный вызов для получения данных изображения. Это означает, что в течение этого периода ваш основной поток (поток пользовательского интерфейса) будет оставаться заблокированным (при условии, что он не вызывается из потока, что, как я полагаю, не происходит при обновлении пользовательского интерфейса, который всегда должен быть в основном потоке пользовательского интерфейса. По сути, это означает, что вы не можете делать что-либо до тех пор, пока вызов не вернется. Вы можете использовать асинхронный (неблокирующий способ сделать это. Один пример с использованием 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

...