Sampai saat ini (September 2014) saya akan merekomendasikan menggunakan NSInteger/CGFloatketika berinteraksi dengan iOS API dll jika Anda juga membangun aplikasi Anda untuk arm64. Ini karena Anda kemungkinan akan mendapatkan hasil yang tidak terduga ketika Anda menggunakan float, longdanint mengetik.
CONTOH: FLOAT / GANDA vs CGFLOAT
Sebagai contoh, kami menggunakan metode delegasi UITableView tableView:heightForRowAtIndexPath:.
Dalam aplikasi 32-bit saja itu akan berfungsi dengan baik jika ditulis seperti ini:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
floatadalah nilai 32-bit dan 44 yang Anda kembalikan adalah nilai 32-bit. Namun, jika kita mengkompilasi / menjalankan bagian kode yang sama dalam arsitektur arm64 64-bit, 44 akan menjadi nilai 64-bit. Mengembalikan nilai 64-bit ketika nilai 32-bit diharapkan akan memberikan tinggi baris yang tidak terduga.
Anda dapat mengatasi masalah ini dengan menggunakan CGFloattipe
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Tipe ini mewakili 32-bit floatdalam lingkungan 32-bit dan 64-bit doubledalam lingkungan 64-bit. Karenanya saat menggunakan tipe ini metode akan selalu menerima tipe yang diharapkan terlepas dari lingkungan kompilasi / runtime.
Hal yang sama berlaku untuk metode yang mengharapkan bilangan bulat. Metode seperti itu akan mengharapkan nilai 32-bit intdalam lingkungan 32-bit dan 64-bit longdalam lingkungan 64-bit. Anda dapat menyelesaikan kasus ini dengan menggunakan tipe NSIntegeryang berfungsi sebagai intatau longberdasarkan pada kompilasi / runtime environmentemnt.