現在(2014年9月)現在NSInteger/CGFloat
、arm64用のアプリもビルドしている場合は、iOS APIなどとやり取りするときに使用することをお勧めします。これはfloat
、long
とint
タイプを使用すると予期しない結果が生じる可能性があるためです。
例:FLOAT / DOUBLEと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
ます。したがって、このタイプを使用する場合、コンパイル/ランタイム環境に関係なく、メソッドは常に期待されるタイプを受け取ります。
整数を期待するメソッドについても同様です。このようなメソッドは、32 int
ビット環境では32 ビット値を、64ビット環境では64 ビット値を期待しlong
ます。このケースは、コンパイル/ランタイム環境に基づいNSInteger
て、int
またはとして機能するタイプを使用して解決できlong
ます。