वर्तमान में (सितंबर 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;
}
float32-बिट मान है और 44 जो आप वापस कर रहे हैं वह 32-बिट मान है। हालाँकि, यदि हम 64-बिट arm64 आर्किटेक्चर में कोड के इस समान भाग को संकलित / चलाते हैं, तो 44 एक 64-बिट मान होगा। 32-बिट मान अपेक्षित होने पर 64-बिट मान लौटा देना एक अनपेक्षित पंक्ति ऊंचाई देगा।
आप CGFloatप्रकार का उपयोग करके इस समस्या को हल कर सकते हैं
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
यह प्रकार float32-बिट वातावरण में 32-बिट और double64-बिट वातावरण में 64-बिट का प्रतिनिधित्व करता है। इसलिए इस प्रकार का उपयोग करते समय विधि हमेशा संकलन / रनटाइम वातावरण की परवाह किए बिना अपेक्षित प्रकार प्राप्त करेगी।
पूर्णांक की अपेक्षा करने वाले तरीकों के लिए भी यही सही है। इस तरह के तरीकों से int32-बिट वातावरण में 32-बिट मान और long64-बिट वातावरण में 64-बिट मान की अपेक्षा की जाएगी । आप इस मामले को उस प्रकार का उपयोग करके हल कर सकते हैं NSIntegerजो intएक longसंकलन या रनटाइम environemnt पर आधारित है।