2014-01-27 46 views
0

目前,我正在使用圖像和文本加載我的所有UITableViewControllers。我不確定是否有縮短加載時間的方法。我在想,GCD可能是去的最佳途徑,但是,我不是太相信我正確地使用這個:如何使用GCD更快地加載信息表

dispatch_async(dispatch_get_main_queue(), ^{ 

     [some method]; 

    }); 

這被加載在ViewDidLoad,而我不能確定如果這是使用GCD的正確位置。另外,是異步加載信息的正確方法嗎?

+0

你怎麼在'[某些方法]'怎麼辦? – KudoCC

+0

你的方法是完全正確的,這是更新UI主線更快 – codercat

+0

我們在看多少個細胞? – footyapps27

回答

0

使用這個,它下載不同線程中的多個文件並且它是異步的。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     //load image here 
    }); 

如果要加載的所有圖像,甚至可能是非常的tableView下來的圖像(在說20排圖像)。然後viewDidLoad中是完美的方法,或者如果你想只加載的圖像,目前然後在cellForRow:atIndexPath方法中下載圖像。

或者,您可以使用AFNetworking高效地下載多個文件。

希望這有助於

+0

是的,我已經在ViewDidLoad和cellForRow:atIndexPath中嘗試了這一點,但它們的加載速度非常緩慢。我感謝幫助! –

+0

@JohnSmith現在的答案肯定會有幫助:幾乎沒有提示你如何改進代碼。 – CouchDeveloper

0

對於加載圖像在表視圖細胞快,你可以使用SDWebImage

使用起來非常簡單。只需將SDWebImage文件夾導入到Xcode項目中即可。它在UIImageVIew上包含一個類別。因此,任何ImageView的對象只是調用,如下圖所示的方法setImageWithURL

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{

static NSString *MyIdentifier = @"MyIdentifier"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

if (cell == nil) 
{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:MyIdentifier] autorelease]; 
} 

// Here we use the new provided setImageWithURL: method to load the web image 
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
       placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

cell.textLabel.text = @"My Text"; 
return cell; 

}