Şu anda (Eylül 2014) NSInteger/CGFloat, arm64 için de uygulamanızı oluşturuyorsanız iOS API'leriyle vb. Bunun nedeni float, longve inttürlerini kullandığınızda beklenmedik sonuçlar almanızdır.
ÖRNEK: FLOAT / ÇİFT VE CGFLOAT
Örnek olarak UITableView delegate yöntemini kullanıyoruz tableView:heightForRowAtIndexPath:.
Sadece 32 bitlik bir uygulamada şöyle yazılırsa iyi çalışır:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
float32 bitlik bir değerdir ve döndürdüğünüz 44 değeri 32 bitlik bir değerdir. Ancak, aynı kod parçasını 64 bit arm64 mimarisinde derlersek / çalıştırırsak, 44, 64 bit değer olacaktır. 32 bitlik bir değer bekleniyorsa 64 bitlik bir değer döndürüldüğünde beklenmeyen bir satır yüksekliği elde edilir.
Bu sorunu CGFloattürünü kullanarak çözebilirsiniz.
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Bu tür, 32 floatbit ortamda 32 bit ve 64 bit ortamda 64 bit temsil eder double. Bu nedenle, bu tür kullanılırken yöntem, derleme / çalışma zamanı ortamından bağımsız olarak her zaman beklenen türü alır.
Tamsayı bekleyen yöntemler için de aynı şey geçerlidir. Bu yöntemler, int32 bit bir ortamda 32 bit ve 64 bit bir ortamda 64 bit bir değer bekler long. Bu durumu , derleme / çalışma zamanı ortamına dayalı NSIntegerolarak intveya olarak hizmet eden türü kullanarak çözebilirsiniz long.