Şu anda (Eylül 2014) NSInteger/CGFloat
, arm64 için de uygulamanızı oluşturuyorsanız iOS API'leriyle vb. Bunun nedeni float
, long
ve int
tü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;
}
float
32 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 CGFloat
türünü kullanarak çözebilirsiniz.
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
Bu tür, 32 float
bit 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, int
32 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ı NSInteger
olarak int
veya olarak hizmet eden türü kullanarak çözebilirsiniz long
.