MPMediaItemPropertyArtwork로 인해 충돌이 발생 함 (이상한 문제)

Nat

'추가 루프'실행 전 할당 '크 래싱'루프를 실행하기 전에 할당

코드:

// loading items to the array, there are no memory warnings after this is completed. The first allocations screenshot is after this code and before extra loop code.
NSMutableArray *albumCovers = [[NSMutableArray alloc] init];
for (MPMediaQuery *query in queries) {
    NSArray *allCollections = [query collections];
    for (MPMediaItemCollection *collection in allCollections) {
        MPMediaItemArtwork *value = [collection.representativeItem valueForProperty:MPMediaItemPropertyArtwork];
                UIImage *image = [value imageWithSize:CGSizeMake(100, 100)];
                if (image) {
                    [albumCovers addObject:image];
                }
            }
        }
    }
    _mediaCollections = [NSArray arrayWithArray:artworkedCollections];
    _albumCovers = [NSArray arrayWithArray:albumCovers];
}

그리고 다른 곳 :

// !!!!! extra loop - from here the memory starts to grow and never release
for (i=0; i< 800; i++) {
    UIImage * coverImage = [_albumCovers objectAtIndex:indexPath.row];
    [veryTemp setImage:coverImage]; // exactly this line adds to the memory. with this line commented, there is no problem.
}

'추가 루프'실행 후 할당 '크 래싱'루프를 실행하기 전에 할당

명확하게하기 위해 only-obj-c를 켜고 시스템 라이브러리를 끈 상태에서 스택을 호출하십시오 (이 기능을 켜면 가장 높은 %는 가장 무거운 메서드 당 0.9 %입니다) 추가 루프 후 스택 호출

나는 약간의 연구를했고 stackoverflow 에서 이것들 VM:ImageIO_PNG_Data은 일반적으로에서 오는 것으로 나타났습니다 [UIImage imageNamed:]. 그러나 당신이 볼 수 있듯이 나는이 방법을 사용하지 않고 단지에서 참조를 얻고 있습니다 MPMediaItemCollection.

Nat

문제는 UIImage가 일반적으로 작은 ref (CGImageRef) 만 유지한다는 것입니다. 항목을 표시 한 후 CGImageRef에 정보가 '주입'되었습니다. 그 결과 테이블은 항상 커졌습니다.

간단하지만 가장 아름답지는 않은 해결책은 코드를 사용하는 것입니다.

NSArray = @[obj1, obj2, obj3]; // where obj is custom NSObject and has a UIImage property

대신에:

NSArray = @[img1, img2, img3]; // where img is of UIImage type

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

NSString.length로 인해 충돌이 발생 함 (NSInvalidArgumentException)

분류에서Dev

NSString.length로 인해 충돌이 발생 함 (NSInvalidArgumentException)

분류에서Dev

CoreData insertNewObjectForEntityForName으로 인해 충돌이 발생 함

분류에서Dev

Assembly.UnsafeLoadFrom으로 인해 웹 앱 충돌이 발생 함

분류에서Dev

onbind 서비스에 대한 Android 전달 문자열로 인해 충돌이 발생 함

분류에서Dev

com.sun.jna.Memory의 반환 문자열로 인해 JVM 충돌이 발생 함

분류에서Dev

Chrome Web-SQL 데이터 조작으로 인해 충돌이 발생 함

분류에서Dev

SwiftUI : 다른 ToolbarItem 배치가있는 뷰로 인해 앱 충돌이 발생 함

분류에서Dev

잘못된 예외 해제로 인해 충돌이 발생합니까?

분류에서Dev

c 읽기 문자열로 인해 충돌이 발생합니다.

분류에서Dev

문제 : 두 개의 안티 바이러스 충돌로 인해 컴퓨터에서 재시작 루프 발생

분류에서Dev

URL에서 QPixmap으로 이미지를로드하는 PyQt로 인해 정지 및 충돌이 발생 함

분류에서Dev

SwiftUI-LazyVGrid 셀의 contextMenu로 인해 Map이있을 때 애니메이션 충돌이 발생 함

분류에서Dev

CalendarView로 인해 앱이 충돌 함

분류에서Dev

vector <string> 요소를 함수에 전달하는 C ++로 인해 SIGSEGV 충돌이 발생 함

분류에서Dev

업데이트 문으로 인해 비정상적인 동작이 발생 함

분류에서Dev

VS2015 : 기본 유니버설 앱 템플릿으로 인해 XAML 디자이너 충돌이 발생 함

분류에서Dev

전역 마우스 후크로 인해 응용 프로그램 충돌이 발생 함 (C ++ / Windows7)

분류에서Dev

메모리 부족 경고로 인해 iOS5에서 충돌이 발생 함-unloadViewForced

분류에서Dev

(cocos2d-x 3.1 + VS2012) TextureCache :: addImageAsync로 인해 가끔 충돌이 발생 함

분류에서Dev

AVAudioSession setCategory .allowBluetooth로 인해 충돌이 발생합니다.

분류에서Dev

lwjgl glfwCreateWindow로 인해 충돌이 발생합니다.

분류에서Dev

LinkedList toArray로 인해 충돌이 발생합니다.

분류에서Dev

XslCompiledTransform Transform 호출로 인해 DTD 충돌이 발생합니다.

분류에서Dev

TextWatcher로 인해 충돌이 발생했습니다.

분류에서Dev

마운트 및 마운트 해제로 인해 데스크톱 환경 충돌이 발생합니다.

분류에서Dev

참조에 의한 전달로 인해 충돌이 발생하는 이유 (C ++)?

분류에서Dev

대화 상자로 인해 앱이 충돌 함

분류에서Dev

동일한 제품의 두 기능에 동일한 플러그인이 있으면 버전 한정자로 인해 충돌이 발생합니다.

Related 관련 기사

  1. 1

    NSString.length로 인해 충돌이 발생 함 (NSInvalidArgumentException)

  2. 2

    NSString.length로 인해 충돌이 발생 함 (NSInvalidArgumentException)

  3. 3

    CoreData insertNewObjectForEntityForName으로 인해 충돌이 발생 함

  4. 4

    Assembly.UnsafeLoadFrom으로 인해 웹 앱 충돌이 발생 함

  5. 5

    onbind 서비스에 대한 Android 전달 문자열로 인해 충돌이 발생 함

  6. 6

    com.sun.jna.Memory의 반환 문자열로 인해 JVM 충돌이 발생 함

  7. 7

    Chrome Web-SQL 데이터 조작으로 인해 충돌이 발생 함

  8. 8

    SwiftUI : 다른 ToolbarItem 배치가있는 뷰로 인해 앱 충돌이 발생 함

  9. 9

    잘못된 예외 해제로 인해 충돌이 발생합니까?

  10. 10

    c 읽기 문자열로 인해 충돌이 발생합니다.

  11. 11

    문제 : 두 개의 안티 바이러스 충돌로 인해 컴퓨터에서 재시작 루프 발생

  12. 12

    URL에서 QPixmap으로 이미지를로드하는 PyQt로 인해 정지 및 충돌이 발생 함

  13. 13

    SwiftUI-LazyVGrid 셀의 contextMenu로 인해 Map이있을 때 애니메이션 충돌이 발생 함

  14. 14

    CalendarView로 인해 앱이 충돌 함

  15. 15

    vector <string> 요소를 함수에 전달하는 C ++로 인해 SIGSEGV 충돌이 발생 함

  16. 16

    업데이트 문으로 인해 비정상적인 동작이 발생 함

  17. 17

    VS2015 : 기본 유니버설 앱 템플릿으로 인해 XAML 디자이너 충돌이 발생 함

  18. 18

    전역 마우스 후크로 인해 응용 프로그램 충돌이 발생 함 (C ++ / Windows7)

  19. 19

    메모리 부족 경고로 인해 iOS5에서 충돌이 발생 함-unloadViewForced

  20. 20

    (cocos2d-x 3.1 + VS2012) TextureCache :: addImageAsync로 인해 가끔 충돌이 발생 함

  21. 21

    AVAudioSession setCategory .allowBluetooth로 인해 충돌이 발생합니다.

  22. 22

    lwjgl glfwCreateWindow로 인해 충돌이 발생합니다.

  23. 23

    LinkedList toArray로 인해 충돌이 발생합니다.

  24. 24

    XslCompiledTransform Transform 호출로 인해 DTD 충돌이 발생합니다.

  25. 25

    TextWatcher로 인해 충돌이 발생했습니다.

  26. 26

    마운트 및 마운트 해제로 인해 데스크톱 환경 충돌이 발생합니다.

  27. 27

    참조에 의한 전달로 인해 충돌이 발생하는 이유 (C ++)?

  28. 28

    대화 상자로 인해 앱이 충돌 함

  29. 29

    동일한 제품의 두 기능에 동일한 플러그인이 있으면 버전 한정자로 인해 충돌이 발생합니다.

뜨겁다태그

보관