আপাতত (সেপ্টেম্বর ২০১৪) আমি NSInteger/CGFloatআইওএস এপিআই ইত্যাদির সাথে ইন্টারঅ্যাক্ট করার সময় ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনিও আর্ম 64 এর জন্য আপনার অ্যাপ তৈরি করে থাকেন। এর কারণ হল আপনি সম্ভবত অপ্রত্যাশিত ফলাফল পেতে হবে যখন আপনি ব্যবহার করেন float, longএবং intধরনের।
উদাহরণ: ফ্লাট / ডাবল বনাম সিজিএফ্লোট
উদাহরণ হিসাবে আমরা UITableView প্রতিনিধি পদ্ধতি গ্রহণ করি tableView:heightForRowAtIndexPath:।
কেবলমাত্র 32-বিট অ্যাপ্লিকেশনটিতে এটি লিখিত থাকলে এটি সূক্ষ্মভাবে কাজ করবে:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
floatএকটি 32-বিট মান এবং 44 আপনি ফিরে আসছেন এটি 32-বিট মান। তবে, আমরা যদি 64-বিট আর্ম 64 আর্কিটেকচারে কোডটি এই একই টুকরোটি সংকলন / চালনা করি তবে 44 এর একটি 64-বিট মান হবে। একটি 32-বিট মান প্রত্যাশিত যখন একটি 64-বিট মান প্রত্যাবর্তন একটি অপ্রত্যাশিত সারি উচ্চতা দেয়।
আপনি CGFloatটাইপটি ব্যবহার করে এই সমস্যাটি সমাধান করতে পারেন
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
এই ধরণেরটি float32-বিট পরিবেশে একটি 32-বিট এবং doubleএকটি 64-বিট পরিবেশে একটি 64-বিট উপস্থাপন করে। সুতরাং এই ধরণের ব্যবহার করার সময় পদ্ধতিটি সর্বদা সংকলন / রানটাইম পরিবেশ নির্বিশেষে প্রত্যাশিত প্রকারটি গ্রহণ করবে।
পূর্ণসংখ্যা প্রত্যাশা পদ্ধতিগুলির ক্ষেত্রেও এটি একই। এই জাতীয় পদ্ধতিগুলি int32-বিট পরিবেশে 32-বিট মান এবং একটি 64-বিট পরিবেশে একটি 64-বিট মান আশা করবে long। সংকলন / রানটাইম এনভায়রোনমেন্টের উপর নির্ভর করে NSIntegerযা টাইপ করে intবা কোনও হিসাবে কাজ করে আপনি এই longকেসটি সমাধান করতে পারেন।