답변
있는 NSDictionary 키 바이트에는 최대 크기 제한이 없습니다.
아마도 NSDictionary 값의 최대 한도에 대해 물어 본다는 경우 해당 제한이 없습니다.
NSDictionary의 키의 고유성은 hash
NSObject의 메서드로 결정됩니다.
업데이트 :
당신이 다음 이중 계층 접근 방식은 당신을 위해 작동 할 수 있습니다 귀하의 데이터를 유지하려면 그와 함께 사전 접근 견뢰도와 함께 이익을 얻고 싶다면. 이 접근법에서;
먼저 데이터는 NSMutableDictionary
에 저장되고 백그라운드에서 plist 파일로 푸시됩니다. 이런 식으로 보입니다.
,이 방법을 사용
NSMutableDictionary *userDictionary;
그런 다음하는 .m 파일에서이 같은 방법을 정의
- (void)storeValue:(id)value forKey:(id)key {
[userDictionary setValue:value forKey:key];
[self commitIntoPlist];
}
-(id)getValueForKey:(NSString *)key{
return [userDictionary objectForKey:key];
}
- (void)removeObjectForKey:(NSString *)key {
[userDictionary removeObjectForKey:key];
[self commitIntoPlist];
}
//commit the data into plist
- (void)commitIntoPlist {
dispatch_once(&onceCommitToken, ^{
commitQueue = dispatch_queue_create([@"com.yourappname.commit" cStringUsingEncoding:NSUTF8StringEncoding], DISPATCH_QUEUE_CONCURRENT);
});
dispatch_async(commitQueue, ^{
//here write the dictionary into plist
[self writeDictionaryIntoPlistFile:userDictionary];
});
}
당신이 사전과 지속성의 속도를 얻을 선언 함께 Plist의. 이 클래스를 싱글 톤으로 유지하고 사용하기 전에 NSMutableDictionary
을 할당하는 것을 잊지 마십시오.
주요 관심사는 앞서 언급 한 내용이며 Apples Documentation에서 "많은 양의 이진 데이터를 저장하기 위해 속성 목록에서 데이터 개체를 사용하지 않는 것이 가장 좋습니다"라고 말합니다. 그들은 "커다란"것으로 무엇을 정의합니까? 1MB, 100GB, 1TB? – user3549620
NSDictionary가 plist 파일과 같지 않습니다. 따라서 NSDictionary에 큰 바이너리 데이터를 유지하는 것은 성능을 저하시키지 않습니다. 메신저 배경 스레드에 plist에 큰 데이터를 저장하는 유사한 방법을 사용합니다. 나는 나의 대답을 업데이트 할 것이다. – Selvin
좋은 예입니다. 전에 디스패치 대기열을 사용 했으므로 의미가 있습니다. NSDictionary에서 읽은 항목에 대해 디스패치 대기열을 사용하는 것 외에 버퍼를 생성해야합니까? 단지 호기심. – user3549620
NSDictionary
의 키와 값은 id
의 개체 항목입니다. 그것들은 내부적으로 포인터로 저장되며 고정 된 크기입니다. NSDictionary
에 넣을 수있는 "너무 큰"개체가 없습니다.
데이터를 직렬화하는 것이 더 좋으며 고정 된 크기는 무엇을 의미합니까? – user3549620
있는 NSDictionary의 일이 오브젝트해야합니다. 객체는 항상 값이 아니라 참조에 의해 저장되기 때문에 객체의 크기는 전혀 중요하지 않습니다.
임의의 데이터를 Foundation 컬렉션에 저장해야하지만 개체 래퍼가 유용하지 않다고 생각하면 일반적으로 NSValue 및 NSData가 최선의 방법입니다.
알아두면 좋을 것 같습니다. 내 관심은 예를 들어 100KB의 객체를 저장하면 액세스 할 때 메모리 문제가 발생할 수 있다는 것입니다. – user3549620
크기 제한 없습니다 자체 NSDictionary
의 키 또는 값에, 다른 사람들이 키와 값 객체에 대한 참조 만 지적으로 저장 및 참조는 일반적으로 4 또는 8 바이트된다. 개체의 크기는 기본적으로 (가상) 메모리의 크기에 의해 제한됩니다.
그러나 귀하의 의견에 명시된 바와 같이, 귀하의 실제 질문이 아닙니다. 오히려 성능 문제를 일으키지 않고 사전의 디스크 표현에 대한 크기에 대해 우려하고 있습니다. 매우 큰 파일을 메모리로 읽는 데는 많은 메가 바이트를 쉽게 읽을 수 있고 사전의 몇 가지 "작은 그래픽"은 문제가되지 않습니다.
plist를 사용하는 것이 최선의 선택이 아닙니다. 이들은 매우 제한된 데이터 유형의 일련 화 표현이며, 예를 들어 NSImage
은 그 중 하나가 아니며 다른 용도에 더 적합합니다. 대신에 표준 Cocoa 보관 클래스를 살펴 봐야합니다.이 클래스는 NSCoding
을 구현하는 모든 클래스를 처리하며 컬렉션 (NSDictionary
, NSArray
등) 및 이미지를 포함하여 많은 표준 클래스를 수행합니다. Archives and Serializations Programming Guide 읽기
HTH
흥미 롭습니다. 특히 NSImage에 대해 언급 한 내용이 흥미 롭습니다. 이전에 파일에서 NSImage로만 데이터를 읽었 기 때문에 파일에서 읽는 것처럼 데이터 문자열에 액세스 할 수있는 방법이 없다고 가정합니다. 상상할 수있는 정보를 바탕으로 몇 가지 가능성을 다시 생각해야합니다. – user3549620
- 1. Symfony2의 최대 데이터 크기
- 2. JSON에서받은 최대 데이터 크기
- 3. NSArray에 저장된 NSDictionary 키의 업데이트/변경
- 4. NSDictionary 문자열에서 키의 일부로 @를 사용합니다.
- 5. BigQuery - 최대 데이터 세트 크기
- 6. http의 게시물 데이터 최대 크기
- 7. memcached에있는 항목의 최대 크기
- 8. 데이터 형식으로 Nsdictionary
- 9. freenet 키의 파일 (데이터 블록) 크기가 최대 인 이유는 무엇입니까?
- 10. Base64로 인코딩 된 데이터 최대 크기
- 11. 아이폰에 데이터 캐싱. 저장된 데이터의 최대 크기
- 12. 거래 영수증 데이터 크기 최대 길이
- 13. MATLAB 메쉬의 경우 최대 데이터 세트 크기?
- 14. vaadin 's Invient 차트 최대 데이터 크기
- 15. iOS에서 로컬로 저장할 수있는 최대 데이터 크기
- 16. D3.js의 최대 데이터 파일 크기
- 17. iPython에서 데이터 프레임의 최소 - 최대 크기 조정
- 18. Zobrist 키의 효율적인 데이터 구조
- 19. 최대 크기
- 20. NSDictionary iphone에서 알 수없는 키의 값을 가져 오는 방법은 무엇입니까?
- 21. Android 커서 최대 크기
- 22. AngularFire2 - $ 키의 데이터 쿼리
- 23. REST 페이로드 최대 크기?
- 24. PyCharm의 최대 파일 크기
- 25. 최대 varchar (최대) 변수의 크기
- 26. NSDictionary 및 NSUserDefaults를 데이터 저장소로 사용 하시겠습니까?
- 27. NSPredicate (nsdictionary + array + nsdictionary)
- 28. 최대 절전 모드에서 복합 키의 where 절
- 29. 상대 최대 글꼴 크기 최대 허용 최대
- 30. NSDictionary writeToFile
'NSDictionary'의 키 id' '타입의 객체 - 항목이다. 그들은 포인터로 저장되며 실제로 "크기"가 없습니다. 어떤 종류의 객체를 키로 사용하려고합니까? – bdesham
나는 plist 내의 작은 그래픽과 같은 이진 데이터를 저장하고 필요에 따라 저장하고 싶습니다. – user3549620
@ user3549620 귀하의 의견을 토대로, 왜 당신이 정말로 가치에 대해 알고 싶어하는 것 같아 키에 대한 질문입니까? – rmaddy