2011-12-05 1 views
0

범용 iOS 응용 프로그램에 메모리 문제가 있습니다. CoreData가 너무 많은 메모리 (> 30Mo)를 사용하고있었습니다. 그래서 나는 사용 된 메모리의 양을 줄이기 위해 할 수있는 모든 일을했다. CoreData 메모리 사용 : iOS 5와 iOS 4.3의 차이점은 무엇입니까?

  • 각 범주가 있습니다 ~ 10 개 하위 범주 (제한 이진 데이터와 개체 < 10K)

    • 높은 수준의 범주 (제한 이진 데이터 < 10K와 법인) :

      기본적으로 내 CoreData 모델은 기본 카탈로그 모델입니다

    • :
    • 각 하위 카테고리 (다시, 한정된 이진 데이터 < 10K) ~ (10 개)의 제품
    • 각 제품 보유 ~ 10 개 상세한 이미지 (~ 40-70K 데이터의 높은 양)이

    (사진 포함) 각 항목의 세부 항목이 해제 된 후, I는 않는

    [NSManagedObjectContext refreshObject : 아이템 mergeChanges : NO] 없다

    호출이

    것들 아이폰 OS와 5+하지만 아이폰 OS 4.3 꽤 잘 작동 (사진을 건너 뛸 순서대로) 메모리 그래프를 줄이기 위해, 나는 많은 오류를 얻을.

    때로는 오류 : 응용 프로그램을 종료

    때문에, 이유 캐치되지 않는 예외 'NSObjectInaccessibleException'에 ' ID가 NSManagedObject :. 이 이 0xbb70480을 무효화되었습니다'

    다른 경우에는 앱이 "처리기가 ​​예외를 throw했습니다"라는 오류가 발생하고 잘못된 내용에 대한 세부 정보가 사라집니다.

    내 질문은 다음과 같습니다 동작에서 iOS 5 및 iOS 4.3 다른 이유

    • 어떤 생각?
    • CoreData에서 사용하는 메모리를 줄일 수있는 방법에 대한 권장 사항은 무엇입니까? (가져 오기 컨트롤러를 해제하고 더 이상 사용되지 않는 컨텍스트를 해제하는 것 제외)
  • 답변

    3

    다른 iOS 버전에서 사용중인 모델의 메모리 사용에있어서의 구체적인 차이점을 말하기 어렵습니다. 내 경험에 비추어 볼 때 핵심 데이터 저장소에 이미지를 저장하는 것이 특히 잘 작동하지 않습니다. 일반적으로 이미지 데이터는 필요할 때만 메모리에 저장해야합니다. 각 카테고리에는 ~ 4-7MB의 이미지 데이터가 있으므로 문제가 발생하기 전에 너무 많은 카테고리를 차지하지 않습니다. 내 응용 프로그램에서 디스크에 이미지 데이터를 저장하고 파일 이름을 저장소에 저장했습니다. 이미지는 디스플레이에 필요할 때만로드되며 더 이상 필요하지 않을 때 해제됩니다. 이것은 상점을 작게 유지하고 가져 오기는 빠릅니다.

    이미지 데이터를 저장소에 보관하려면 최대한 최적화해야합니다. 필요한 경우 이미지에 오류가 발생하도록 이미지 데이터를 제외한 모든 속성을 가져 오도록 모든 가져 오기 요청을 구성합니다. 또한 필요하지 않을 때 이미지 데이터가 오류로 되돌아 가도록해야합니다.

    편집 : 핵심 데이터에서 왜 화상 데이터 축적에 대한 추가 정보를 원하시면 나쁜

    매장 이미지 데이터에 핵심 데이터를 사용하여 또 다른 문제는 필요한 경우에만 수행하는 경우에도 그로드 및 데이터를 저장, 인, 비 소요 시간이 많이 소요되며로드하는 동안 주 스레드를 차단합니다. 이미지 데이터를 저장할 때마다 배경에서로드하려고합니다. 파일 저장소를 사용하면 간단합니다. 핵심 데이터를 사용하는 경우 새 컨텍스트를 만드는 백그라운드 이미지로드/저장 논리를 구현하고 이미지 데이터를로드/저장합니다. 로드 할 때 UIImage를 만들거나 표시 할 수 있도록 데이터를 주 스레드로 전달해야합니다.

    +0

    감사합니다. @XJones. "이미지 데이터를 제외한 모든 속성을 가져 오기 위해 필요한 모든 가져 오기 요청을 구성하여 필요에 따라 이미지에 오류가 발생하도록합니다. 필요없는 경우 이미지 데이터가 오류로 되돌아 가도록해야합니다." 어떻게 할 수 있니? –

    +0

    문제 없습니다. NSFetchRequest'의'propertiesToFetch' 속성을 확인하십시오. – XJones

    +0

    고마워, 내가해볼 게. 나는이 특징을 몰랐다. –