iOS 및 macOS용 네이티브 형식

Mac 및 iOS API는 32비트 플랫폼에서는 항상 32비트이고 64비트 플랫폼에서는 64비트인 아키텍처별 데이터 형식을 사용합니다.

예를 들어 Objective-C 데이터 형식 int32_tNSInteger 32비트 시스템과 64비트 시스템에 int64_t 매핑합니다.

이 동작과 일치하기 위해 통합 API에서 이전 사용 int (.NET에서 항상 있는 System.Int32것으로 정의됨)을 새 데이터 형식 System.nint으로 대체합니다. "n"은 "네이티브"를 의미하는 것으로 생각할 수 있으므로 플랫폼의 네이티브 정수 형식입니다.

이러한 새 데이터 형식을 사용하면 컴파일 플래그에 따라 32비트 및 64비트 아키텍처에 대해 동일한 소스 코드가 컴파일됩니다.

새 데이터 형식

다음 표에서는 이 새로운 32/64비트 세계와 일치하도록 데이터 형식의 변경 내용을 보여줍니다.

네이티브 형식 32비트 백업 유형 64비트 백업 유형
System.nint System.Int32 (int) System.Int64 (long)
System.nuint System.UInt32 (uint) System.UInt64 (ulong)
System.nfloat System.Single (float) System.Double (double)

C# 코드가 현재와 같은 방식으로 더 많거나 적게 표시되도록 해당 이름을 선택했습니다.

암시적 변환과 명시적 변환

새 데이터 형식의 디자인은 단일 C# 원본 파일이 호스트 플랫폼 및 컴파일 설정에 따라 32비트 또는 64비트 스토리지를 자연스럽게 사용할 수 있도록 하기 위한 것입니다.

이렇게 하려면 플랫폼별 데이터 형식에서 .NET 정수 및 부동 소수점 데이터 형식으로의 암시적 및 명시적 변환 집합을 디자인해야 했습니다.

데이터 손실 가능성이 없는 경우 암시적 변환 연산자가 제공됩니다(64비트 공간에 32비트 값이 저장됨).

데이터 손실 가능성이 있는 경우 명시적 변환 연산자가 제공됩니다(64비트 값이 32 또는 잠재적으로 32개의 스토리지 위치에 저장됨).

intuintfloat 모두 암시적으로 변환할 nintnuint 수 있으며nfloat, 32비트가 항상 32비트 또는 64비트에서 적합하기 때문에

nintnfloatnuint 모두 암시적으로 변환할 longulong 수 있으며 double 32비트 또는 64비트 값은 항상 64비트 스토리지에 적합합니다.

네이티브 형식에 nintfloatnuintnfloatintuint 64비트 스토리지가 포함될 수 있으므로 명시적 변환을 사용해야 합니다.

네이티브 형식에서 longnfloatulongdoublenintnuint 32비트 스토리지만 보유할 수 있으므로 명시적 변환을 사용해야 합니다.

CoreGraphics 형식

CoreGraphics와 함께 사용되는 지점, 크기 및 사각형 데이터 형식은 실행 중인 디바이스에 따라 32비트 또는 64비트가 사용됩니다. 원래 iOS 및 Mac API를 바인딩할 때 호스트 플랫폼의 크기(데이터 형식)와 일치하는 기존 데이터 구조를 사용했습니다 System.Drawing.

Unified이동할 때 다음 표와 같이 인스턴스를 해당 CoreGraphics 인스턴스 System.Drawing 로 바꿔야 합니다.

System.Drawing의 이전 형식 새 데이터 형식 CoreGraphics 설명
RectangleF CGRect 부동 소수점 사각형 정보를 보유합니다.
SizeF CGSize 부동 소수점 크기 정보(너비, 높이) 보유
PointF CGPoint 부동 소수점, 점 정보 보유(X, Y)

이전 데이터 형식은 부동 소수점을 사용하여 데이터 구조의 요소를 저장하고 새 데이터 형식은 사용합니다 System.nfloat.