iOS 및 macOS용 네이티브 형식
Mac 및 iOS API는 32비트 플랫폼에서는 항상 32비트이고 64비트 플랫폼에서는 64비트인 아키텍처별 데이터 형식을 사용합니다.
예를 들어 Objective-C 데이터 형식 int32_t
을 NSInteger
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개의 스토리지 위치에 저장됨).
int
는 uint
float
모두 암시적으로 변환할 nint
nuint
수 있으며nfloat
, 32비트가 항상 32비트 또는 64비트에서 적합하기 때문에
nint
nfloat
는 nuint
모두 암시적으로 변환할 long
ulong
수 있으며 double
32비트 또는 64비트 값은 항상 64비트 스토리지에 적합합니다.
네이티브 형식에 nint
float
nuint
nfloat
int
uint
64비트 스토리지가 포함될 수 있으므로 명시적 변환을 사용해야 합니다.
네이티브 형식에서 long
nfloat
ulong
double
nint
nuint
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
.