2010-07-14 2 views
0

그래서이 문제는 AssetsLibrary API에 문제가 있는지 잘 모르겠지만 그 밖의 어떤 일이 있을지 알 수는 없습니다.AssetsLibrary and ImageView -setImage Slowness

ALAssetsGroup에서 -enumerateAssetsUsingBlock 메서드를 사용하여 ALAssets로 배열을로드하고 있습니다. 완료되면 사용자 정의 이미지 스크롤러를로드하고 있습니다. 스크롤러가 끝나면 NSInvocationOperations를 사용하여 디스크의 사진 라이브러리에서 현재 보이는 뷰 (페이지)의 이미지를로드합니다. 이미지가로드되고 캐시되면 대리인에게 캐시에서 이미지를 가져 와서 스크롤러의 이미지보기에 표시합니다.

모든 것이 정상적으로 작동하지만 -setImage : 실제로 화면에 실제로 표시되는 시간까지 호출되는데 걸리는 시간은 참을 수 없습니다. 실제로는 실제로 10 초 이상 표시되는 경우도 있습니다.

크기 조정을 할 때 처리 시간에 거의 아무 것도 추가하지 않는 이미지 크기 조정을 사용하거나 사용하지 않고 시도했습니다. 앞에서 말했듯이 이미지보기에서 -setImage를 호출하면 속도가 느려집니다. 누구든지 AssetLibrary API의 일종의 측면을 알고 있을까요?

는 여기에 몇 가지 관련 코드입니다 :

- (void)setImagesForVisiblePages; 
{ 
    for (MomentImageView *page in visiblePages) 
    { 
    int index = [page index]; 
    ALAsset *asset = [photos objectAtIndex:index]; 

    UIImage *image = [assetImagesDictionary objectForKey:[self idForAsset:asset]]; 

    // If the image has already been cached, load it into the 
    // image view. Otherwise, request the image be loaded from disk. 
    if (image) 
    { 
     [[page imageView] setImage:image]; 
    } 
    else { 
     [self requestLoadImageForAsset:asset];  
     [[page imageView] setImage:nil]; 
    } 
    } 
} 

답변

0

이 것이다 아마 엉망이 내가 사과 있도록 AssetsLibrary 문제를 해결하고자하는 모든 웹 검색. 문제는 AssetsLibrary가 아니라 멀티 스레딩을 사용하는 것으로 나타났습니다. 이미지로드가 끝나면 기본 NSNotificationCenter를 사용하여 알림을 게시했습니다. UIImageView를 -setImage로 업데이트 (또는 적어도 업데이트하려고 시도)했던 백그라운드 스레드에 게시했습니다. -performSelectorOnMainThread를 사용하도록 변경하고 선택기가 이미지를 대신 설정하면 모든 것이 잘되었습니다.

멀티 스레딩에 익숙해도 아무 문제가없는 것처럼 보입니다. 나는 때때로 작은 문제도 잊어 버립니다.