우리가 몇 년 전에 가지고 있던 32 비트에서 64 비트 스텝에 관한 일반적인 질문보다 더.32 비트 및 64 비트 호환성을 어떻게 올바르게 보장합니까?
디스크에 저장하는 앱이 있고 다른 사용자에게 전송할 수 있다고 가정합니다. 32 비트 시스템에서 전송할 수 있으며 64 비트에서 읽을 수도 있고 그 반대로 읽을 수도 있습니다. 내가 32 비트에
[NSData dataWithBytes:&thedata length:sizeof(long)];
와 디스크에 물건을 작성하는 경우
는 sizeof의 4되며 64 비트에 8. 일단 디스크에 기록 될 것입니다 그것입니다 서면 다운 바이트 '와 상대방은 자신의 길이로 그것을 읽을 것이다.
작동하도록하려면 모든 길이를 일관되게 유지하는 기본 요소로 모두 캐스팅해야합니다.
만약 내가 NSInteger
을 사용한다면 모든 조건절 일 수있는 모든 typedef와 같은 경우가 아니라는 것을 이해합니다. 그러나 프리미티브조차도 안전하지 않습니다. int
및 float
은 현재 사용 중이지만 long
은 변경되었습니다. 어떻게 안전하게 유지되는 프리미티브로 작업 할 수 있습니까?
미래를 가져올 수도 알고 ...
그래서이 전투하는 최선의 전술 무엇인가? 당신은 길이가 32 비트 및 64 비트 시스템에서 동일 보장해야 할 때마다
"응용 프로그램이 32 비트 프로세스에서 64 비트 값을 읽으려는 경우가 드물지만'decodeIntegerForKey :'(32 비트 프로세스를 다시 읽지 않고'decodeIntegerForKey : 비트 32 비트 시스템에서). " https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Cocoa64BitGuide/ConvertingExistingApp/ConvertingExistingApp.html#//apple_ref/doc/uid/TP40004247-CH5-SW1 – matt
앱에서 무엇을 모르는 경우 시스템에 의해 작성된?모두 가지고있는 파일입니다. – NikkyD
시스템 식별자를 데이터 스트림에 써야합니다. 아카이브 버전 #도있을 것입니다. 정말로 필요하지 않으면 새로운 데이터 형식을 고안하지 않는 것이 좋습니다. NSArchiver 또는 CoreData 또는 속성 목록 등을 사용하십시오 ... – bbum