현재 (2014 년 9 월 현재) NSInteger/CGFloat
arm64 용 앱을 빌드하는 경우 iOS API 등과 상호 작용할 때 사용하는 것이 좋습니다 . 당신이 사용할 때 가능성이 예상치 못한 결과를 얻을 수 있기 때문입니다 float
, long
그리고 int
유형을.
예 : 플로트 / 더블 대 CGFLOAT
예를 들어 UITableView 대리자 메소드를 사용 tableView:heightForRowAtIndexPath:
합니다.
32 비트 전용 응용 프로그램에서는 다음과 같이 작성하면 제대로 작동합니다.
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
float
는 32 비트 값이고 반환하는 44는 32 비트 값입니다. 그러나 64 비트 arm64 아키텍처에서 동일한 코드를 컴파일 / 실행하면 44가 64 비트 값이됩니다. 32 비트 값이 예상 될 때 64 비트 값을 반환하면 예기치 않은 행 높이가 제공됩니다.
CGFloat
유형 을 사용하여이 문제를 해결할 수 있습니다
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
이 유형은 32 float
비트 환경에서 32 비트와 64 비트 를 나타냅니다.double
를, 64 비트 환경에서 64 를 나타냅니다. 따라서이 유형을 사용할 때 메소드는 컴파일 / 런타임 환경에 관계없이 항상 예상 된 유형을 수신합니다.
정수를 기대하는 메소드도 마찬가지입니다. 이러한 방법은 int
32 비트 환경에서 32 비트 값을, 64 비트 환경에서 64 비트 값을 예상 long
합니다. 컴파일 / 런타임 환경을 기반으로 또는 유형 NSInteger
을 제공 하는 유형 을 사용하여이 경우를 해결할 수 있습니다 .int
long