1

URL から UIImage を取得する次の 2 つの方法の主な違いは何ですか? 私は最近、アプリで方法 1から方法 2に切り替えましたが、基本的に両方の方法が実際にはほぼ同じであると考えていたときに、速度が大幅に向上したように見えました。なぜ私がそのような速度の増加を見たのかを理解しようとしているだけです.

方法 1

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    NSData *imageData = [NSData dataWithContentsOfURL:self.imageURL];

    dispatch_async(dispatch_get_main_queue(), ^{
        self.image = [UIImage imageWithData:imageData];
    });
});

方法 2

- (void)fetchImage
{
    NSURLRequest *request = [NSURLRequest requestWithURL:self.imageURL];
    self.imageData = [[NSMutableData alloc] init];
    self.imageURLConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}   

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    if(connection == self.imageURLConnection)
    {
        [self.imageData appendData:data];
    }
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    if(connection == self.imageURLConnection)
    {
        self.image = [UIImage imageWithData:self.imageData];
    }
}
4

1 に答える 1

1

私の最善の推測は、メソッド 1の場合、AsyncURLConnectionクラスがマルチスレッドであるためです。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    /* process downloaded data in Concurrent Queue */

    dispatch_async(dispatch_get_main_queue(), ^{

        /* update UI on Main Thread */

そのため、共有リソースの競合によりパフォーマンスが低下する場合があります。

一方、メソッド 2は、実際にはトランザクション処理のように実装された単なるメソッドの集まりです。

おそらくそれ以上のものもあります。

于 2013-02-27T19:30:47.213 に答える