2012-04-04 32 views
0

こんにちは私は画面に画像をすばやく読み込む際に問題が発生しています。iphone - 画像読み込み

ここで私がイメージをロードする方法である:

for (int i = 1; i < 19; i++) 
{ 
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_Hole%d_", courseName, i]]; 
    imageView = [[UIImageView alloc] initWithImage:image]; 
    frame.origin.x = cx; 
    imageView.frame = frame; 
    [scrollView addSubview:imageView]; 
    cx += scrollView.frame.size.width; 
    imageView = nil; 
} 

各画像は、私はそこにはないと思う640×820

+0

あなたのビューに当たったときに、640x820の19枚の画像を読み込むのに時間がかかるのはなぜですか?また、私はこれらのすべての画像のメモリ使用量を心配しています。あなたが画面上で必要なときにだけ、レイジーローディングイメージについて考えましたか? –

答えて

0

である私は、ビューを打つ最初の時間は遅延があるようですこれをスピードアップするためにできることは他にもたくさんあります。

しかし、ある程度処理を高速化できるメモリ管理の問題があります。

for (int i = 1; i < 19; i++)  { 
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_Hole%d_", courseName, i]]; 
    imageView = [[UIImageView alloc] initWithImage:image]; 
    frame.origin.x = cx; 
    imageView.frame = frame; 
    [scrollView addSubview:imageView]; 
    cx += scrollView.frame.size.width; 
    [imageView release]; 
} 
+2

OPがARCを使用している場合、 'release'を呼び出すことはエラーであり、元のコードはメモリ管理に関しては問題ありませんでした。 –

0

はい、画像の読み込みには時間がかかります。あなたは大きなイメージを持っているので、期待される結果です。 UIImagesをスクロール表示に追加する代わりに、タイルレイヤーについて考えるようにしてください。 CATiledLayerがお手伝いします

+0

私に役立つ例がありますか? – Mikerizzo

2

他にも、画像処理の根本的な問題、すなわちデバイスの有限のI/O速度に遭遇しているとのことを他の人が指摘している人もいます。

ちなみに、imagedNamed:はイメージを内部的にキャッシュしているため、後続のロードが高速である理由がわかります。

タイリングがオプションでない場合(@Krio推奨)、ビューが必要になる前にバックグラウンドスレッドで画像をキャッシュにプリロードすることができます。たとえば、このビューが一般に別のビューからアクセスされている場合は、dispatch_asyncにラップされた一連のimageNamed:コールまたは前のビューがロードされたときにNSOperationQueueコールを開始することができます。ただし、特定の状況でのみ役立ちます。

- あなたの画像ビューは、ほとんどの場合、要求される次のUI要素です。

- どの資産をロードするのかは事前に分かっています。画像の

- あなたのセットはあなたがちょうどこれもに複雑のかなりの量を導入していること

注意を満たしたキャッシュを立ち退かせるためにフレームワークを強制的に、すべてのメモリがいっぱいにするつもりはないことを十分に小さいですあなたのアプリケーション設計は、絶対に必要でない限り避けるべきです。

0

こんにちは、画像読み込みUIをフリーズします。バックグラウンドでこのタスクを実行して、UIがフリーズすることはありません。以下のコードを試してみてください。

-(void)loadImages{ 
     [self performSelectorInBackground:@selector(loadImagesInBackGround) withObject:nil]; 
    } 

    -(void)loadImagesInBackGround{ 

     for (int i = 1; i < 19; i++) 
    { 
     UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_Hole%d_", courseName, i]]; 
     imageView = [[UIImageView alloc] initWithImage:image]; 
     frame.origin.x = cx; 
     imageView.frame = frame; 
     [scrollView addSubview:imageView]; 
     cx += scrollView.frame.size.width; 
     imageView = nil; 
    } 

} 

イメージをロードする場所からloadImages:を呼び出す必要があります。また、Grand Central Dipatch(GCD)を試して、画像を背景に読み込むこともできます。