ณ ปัจจุบัน (กันยายน 2014) ฉันขอแนะนำให้ใช้NSInteger/CGFloat
เมื่อต้องโต้ตอบกับ iOS API และอื่น ๆ หากคุณกำลังสร้างแอปของคุณสำหรับ arm64 นี้เป็นเพราะคุณมีแนวโน้มที่จะได้รับผลที่ไม่คาดคิดเมื่อคุณใช้float
, long
และint
ประเภท
ตัวอย่าง: FLOAT / DOUBLE เทียบกับ CGFLOAT
ตัวอย่างเช่นเราใช้วิธีการมอบหมาย UITableView tableView:heightForRowAtIndexPath:
ตัวอย่างเช่นเราใช้วิธีการที่ผู้รับมอบสิทธิ์
ในแอปพลิเคชัน 32- บิตเท่านั้นมันจะทำงานได้ดีถ้ามันเขียนดังนี้:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
float
คือค่า 32- บิตและ 44 ที่คุณส่งคืนคือค่า 32- บิต อย่างไรก็ตามหากเราคอมไพล์ / รันโค้ดเดียวกันนี้ในสถาปัตยกรรม 64 บิต 64 บิต 44 จะเป็นค่า 64 บิต การส่งคืนค่า 64 บิตเมื่อคาดหวังว่าค่า 32 บิตจะให้ความสูงของแถวที่ไม่คาดคิด
คุณสามารถแก้ไขปัญหานี้ได้โดยใช้CGFloat
ประเภท
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
ชนิดนี้แสดงถึง 32- บิตfloat
ในสภาพแวดล้อม 32- บิตและ 64- บิตdouble
ในสภาพแวดล้อม 64- บิต ดังนั้นเมื่อใช้ประเภทนี้วิธีการจะได้รับประเภทที่คาดหวังเสมอโดยไม่คำนึงถึงสภาพแวดล้อมการคอมไพล์ / รันไทม์
เช่นเดียวกับวิธีการที่คาดว่าจะเป็นจำนวนเต็ม วิธีการดังกล่าวจะคาดหวังint
ค่า 32 บิตในสภาพแวดล้อม 32 บิตและ 64 บิตlong
ในสภาพแวดล้อม 64 บิต คุณสามารถแก้ไขกรณีนี้ได้โดยใช้ชนิดNSInteger
ที่ทำหน้าที่เป็นint
หรือlong
ขึ้นอยู่กับคอมไพล์ / รันไทม์สภาพแวดล้อม