문제

난로 변환하는 작동하는 응용 프로그램에서 64 비트입니다.Apple docs 상태 CGFloatfloat 에서 32 비트와 double 에서 64 비트입니다.

는 경우에는,그래서 당신은 어떻게 처리하는 인코딩/디코딩의 가치입니까?예를 들어,만약 작성 NSNumberCGFloat, 해야 사용 -numberWithFloat:-numberWithDouble: 방법 NSNumber?같은 질문에 적용됩 NSCoderNSKeyedArchiver 방법 -encodeFloat:forKey:-encodeDouble:forKey:.

Do I have to write 조건부의 매크로도록 -numberWithFloat: 라서 32-bit/ -numberWithDouble: 64-bit?

어떻게 될 경우에는 사용자 실행되는 64 비트 버전의 앱에 저장하는 파일의 이러한 값을 인코딩되어 있으로 복식 파일을 열/보관에서 32 비트 시스템?

모든 방법들을 통해서 나를 사용하는 응용 프로그램 CGFloats 가능성이 필요한 정밀도 수준 double, 므로 나도에 대한 걱정 이?

도움이 되었습니까?

해결책

어떻게 될 경우에는 사용자 실행되는 64 비트 버전의 앱에 저장하는 파일의 이러한 값을 인코딩되어 있으로 복식 파일을 열/보관에서 32 비트 시스템?

특별한 것은 없습니다.파일 포함 double, 고,아마도 당신이 보내기 decodeDouble:forKey: 값을 검색,그래서 당신을 얻을 것 double.할 수 있습니다 다음으로 캐스팅 CGFloat—잃게 되는 정밀도는 당신이 32 비트 컴퓨터,하지만 당신은 그렇게 캐스팅합니다.(경우에 보유 double, 에,당신은 여전히게 캐스팅 CGFloat 할 때 값을 전달하는 석영/AppKit/UIKit.)

대안을 고려:저장할 floats 에서 파일에서 64 비트 컴퓨터,그리고 그런 다음 로드 파일이 뒤에서 동일한 컴퓨터에 있습니다.당신 및 석영을 처리할 수 있 전체의 정밀도 64-bit double 유형,그러나 당신이 그것을 하지 않기 때문에,당신은 그것을 던졌을 때을 작성한 파일.이 값을 변경에서 모든 캐스팅에는 변화는 영원하다.

그래서 내 추천은 항상 사용 double 형 NSKeyedArchiver 지 않는 한,당신은 당신이 알고 있는 를 사용하려고 하지만 아무것도 float (즉,대상 API 를 사용 float, 결코 double).이것은 진실하지 않의 석영을 위해,그래서 CGFloat, 용 double.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top