NSCoding을 사용하여 몇 가지 필드가있는 사용자 지정 개체를 관리하고 그 중 하나의 이미지를 사용하고 있습니다. iOS 5.0 이상 만 타겟팅 중이며 ARC로 전환했습니다. 모든 일을하고 있지만 성능에 중점을두고 있습니다.이 질문을 보지 못했습니다. 여기서는 다음과 같습니다.NSCoding, NSData, UIImages 및 성능
UIImage를 NSData로 변환하고 주 NSCoding 파일에 추가합니다 (plist, if 중요)를 디스크에 저장합니다. 이미지가 두 개 이상인 경우 이미지 이름이 순차적이됩니다 (예 : image1, image2, image3). UITableView (크기가 조정 된 축소판)와 상세보기 모두에서 이미지를 사용합니다. 이에 대한 부정적인면은 plist 풍선이 크기가 있다는 것입니다. 즉, 모든 NSData를 한꺼번에로드하기 때문에 초기로드 시간이 느린 것을 의미합니다.
이 문제를 제거하고 한 번에 하나의 이미지 만로드하는 가장 좋은 방법은 무엇입니까?
내가 생각 한 것 : 나는 디스크에있는 NSData 쓰기
의 PLIST에 배열을 추가하고 배열에 각 이미지의 파일 이름 만 참조를 추가합니다. 그런 다음 지정된 위치에서 이미지 파일 이름을 참조하여 디스크에서 찾은 다음 사용하는 것이 좋습니다.
모든 의견을 환영합니다. 나는 무엇보다도 개념 구현에 더 박차 고있어, 재미있게도 충분히 논의 된 주제는 아니다.
감사합니다,
편집 : 아래의 요청으로
, 여기에 이미지를 복용하고있는 NSData로 돌려의 예입니다 :
UIImage *originalImage;
NSData *imageData = UIImagePNGRepresentation(originalImage);
//I save it all to the app's document directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//I am using the images in a tableView and thus found it easiest to append the row number to each image filename.
//'y' below is just an integer that corresponds to the number of items in the master array
NSString *fileName = [NSString stringWithFormat:@"image%d.png",y];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:fileName];
[imageData writeToFile:documentsDirectory atomically:YES];
// NSLog(@"The filename is %@", fileName);
//newObject is an instance of my NSCoding object
[newObject setImageName: fileName];
그래는 별도의 파일로 이미지를 저장하고 파일 이름으로 그들을 참조에 대한 당신의 생각은 내가 할 줄 정확히이다. 레코드 수가 많아서 이미지가 아닌 모든 필드를로드하는 데 오랜 시간이 걸리기 시작했다면 이미지 데이터가 아닌 코어 데이터로 전환했을 것입니다. – yuji
UIImage를 NSData로 직렬화하는 간단한 코드 예가 있습니까? 그것은 내가하고있는 프로젝트에 유용 할 것이고, 다른 사람들에게는 의심의 여지가 없습니다. –