0

ユーザーが画像を共有できるアプリケーションを開発しています.phpファイルを使用して、サーバーにファイルをアップロードし、phpファイルを使用してダウンロードしています.ファイルをダウンロードすると、少し時間がかかります.どうすれば少し速くなりますか.

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSString *data1 = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSArray *arrImg = [data1 componentsSeparatedByString:@"@@@"];
    int i;
    NSMutableArray *receivedUrlArr = [[NSMutableArray alloc]init];
    NSString *str,*strNew,*path;
    NSData *imageData;
    ImagesClass *obj;
    int count;
    for ( i=0; i<[arrImg count]-1; i++) {
        [receivedUrlArr addObject:[arrImg objectAtIndex:i]];

        str = [NSString stringWithFormat:@"http:////receive_images/%@",[receivedUrlArr objectAtIndex:i]];
        strNew = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        UIImage *myImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:strNew]]];  
        obj = [[ImagesClass alloc]init];
        obj.imageId = i+1;
        obj.imageName = [[arrImg objectAtIndex:i] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        obj.thumbImage = myImage;

        [[DBModel database]inserttoReceivedList:obj receiverMobNo:mobileno];

        path = [RECEIVEDIMAGE_DIR stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",obj.imageName]];
        imageData = UIImagePNGRepresentation(obj.thumbImage);
        [imageData writeToFile:path atomically:YES];
    }
}

前もって感謝します。

4

2 に答える 2

1

画像を保存する方法がどれほど効率的であっても、接続速度が常にボトルネックになります。

しかし、あなたはこれについて間違った方法で進んでいるようです。-connection:didReceiveData は、データを段階的に受信するためのものです。データを受信したら、画像の読み込みが完了し、部分的にダウンロードされた画像を保存するために複雑な処理を行っていると想定しているようです。代わりに、NSURLConnection のデリゲートは -connectionDidFinishLoading を実装する必要があります。この方法では、連結されたデータを画像に変換して保存します。

設定方法は次のとおりです。画像を表示している/さらに画像をダウンロードする必要があるコントローラークラスがあると仮定しましょう。ここで、NSURLConnection Delegate を実装する「ImageDownloader」などの名前のクラスを作成します。このクラスを初期化するときに、イメージ名と、ダウンロードする必要があるイメージへの URL を指定します。ImageDownloader 内では、NSMutableData プロパティが必要になります。最後に、物事を動かすには -startDownload などのメソッドが必要です。

-startDownload は、最初に NSMutableData プロパティが空で初期化されていることを確認する必要があります。それが完了したら、NSURLConnection のダウンロードを開始できます。ImageDownloader のインスタンスにデリゲートを設定してください。-connection:didReceiveData で、受信したデータを NSMutableData プロパティに追加します。-connectionDidFinishLoading で、その NSMutableData プロパティを画像に変換し、コントローラーが提供した画像の名前を使用して保存します。そこから、デリゲート メソッドの呼び出しまたは通知を通じて、画像が保存されたことをコントローラー インスタンスに知らせます。

お役に立てれば。

編集:IIRC、Appleは「ImageDownloader」と呼ばれるサンプルコードを提供していますが、この説明が混乱している場合、これはかなり似ています。

于 2013-04-08T13:47:22.377 に答える