ณ ปัจจุบัน (กันยายน 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ขึ้นอยู่กับคอมไพล์ / รันไทม์สภาพแวดล้อม