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