2012-04-04 2 views
0

안녕하세요. 화면에 이미지를 빠르게로드하는 데 문제가 있습니다. 나는 이미지를로드하는 방법iphone - 이미지로드

다음

은 다음과 같습니다 : 각각의 이미지가 내가 거기에 생각하지 않는다 640 × 820

+0

보기를 칠 때 약간의 시간이 소요되는 19 640x820 이미지로드가 왜 필요하지 않습니까? 또한, 나는이 모든 이미지의 메모리 사용에 대해 걱정할 것입니다. 화면 상 필요할 때만 게으른 로딩 이미지에 대해서 생각해 보셨습니까? –

답변

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 = nil; 
} 

내가보기에 충돌 처음 지연이있는 것 같습니다 이 속도를 높이기 위해 할 수있는 다른 방법은 많이 있습니다.

그러나 어느 정도 프로세스 속도를 높일 수있는 메모리 관리 문제가 있습니다.

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 권장),보기가 필요하기 전에 백그라운드 스레드의 캐시에 이미지를 미리로드 해보십시오. 예를 들어,이보기가 다른보기에서 일반적으로 액세스하는 경우 으로 묶인 일련의 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)를 사용하여 이미지를 다시로드 할 수 있습니다.