안녕하세요. 화면에 이미지를 빠르게로드하는 데 문제가 있습니다. 나는 이미지를로드하는 방법iphone - 이미지로드
다음은 다음과 같습니다 : 각각의 이미지가 내가 거기에 생각하지 않는다 640 × 820
안녕하세요. 화면에 이미지를 빠르게로드하는 데 문제가 있습니다. 나는 이미지를로드하는 방법iphone - 이미지로드
다음은 다음과 같습니다 : 각각의 이미지가 내가 거기에 생각하지 않는다 640 × 820
입니다
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];
}
OP가 ARC를 사용하고 있다면,'release'를 호출하는 것이 에러이며 원래의 코드는 메모리 관리와 관련하여 문제가 없습니다. –
예, 이미지로드에는 다소 시간이 걸립니다. 큰 이미지가 많으므로 예상되는 결과입니다. UIImages를 스크롤 뷰에 추가하는 대신 타일링 된 레이어에 대해 생각해보십시오. CATiledLayer가 도움이 될 수도 있습니다.
나를 도와 줄 수있는 예가 있습니까? – Mikerizzo
다른 사람들은 이미지 처리의 근본적인 문제, 즉 장치의 유한 한 I/O 속도에 직면 해 있다고 언급 한 다른 사람들이 있습니다.
덧붙여 말하자면, imagedNamed:
은 이미지를 내부적으로 캐시하기 때문에 후속로드가 빠른 이유를 설명 할 수 있습니다.
타일링이 옵션이 아닌 경우 (@Krio 권장),보기가 필요하기 전에 백그라운드 스레드의 캐시에 이미지를 미리로드 해보십시오. 예를 들어,이보기가 다른보기에서 일반적으로 액세스하는 경우 으로 묶인 일련의 imageNamed:
또는 이전보기가로드 될 때 NSOperationQueue
으로 시작할 수 있습니다. 그래도 특정 상황에서만 도움이 될 것입니다.
- 이미지보기는 거의 항상 요청할 다음 UI 요소입니다.
미리로드 할 자산을 알고 있습니다. 이미지의
- 귀하의 세트는 방금이도에 복잡성의 상당한 양을 소개하는 것이
가주 채워진 캐시를 축출하기 위해 프레임 워크를 강제로 모든 메모리를 기입하지 않을만큼 작다 귀하의 응용 프로그램 설계, 그래서 절대적으로 필요하지 않는 한 피해야합니다.
안녕 이미지로드가 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)를 사용하여 이미지를 다시로드 할 수 있습니다.
보기를 칠 때 약간의 시간이 소요되는 19 640x820 이미지로드가 왜 필요하지 않습니까? 또한, 나는이 모든 이미지의 메모리 사용에 대해 걱정할 것입니다. 화면 상 필요할 때만 게으른 로딩 이미지에 대해서 생각해 보셨습니까? –