আপাতত (সেপ্টেম্বর ২০১৪) আমি 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;
}
এই ধরণেরটি float
32-বিট পরিবেশে একটি 32-বিট এবং double
একটি 64-বিট পরিবেশে একটি 64-বিট উপস্থাপন করে। সুতরাং এই ধরণের ব্যবহার করার সময় পদ্ধতিটি সর্বদা সংকলন / রানটাইম পরিবেশ নির্বিশেষে প্রত্যাশিত প্রকারটি গ্রহণ করবে।
পূর্ণসংখ্যা প্রত্যাশা পদ্ধতিগুলির ক্ষেত্রেও এটি একই। এই জাতীয় পদ্ধতিগুলি int
32-বিট পরিবেশে 32-বিট মান এবং একটি 64-বিট পরিবেশে একটি 64-বিট মান আশা করবে long
। সংকলন / রানটাইম এনভায়রোনমেন্টের উপর নির্ভর করে NSInteger
যা টাইপ করে int
বা কোনও হিসাবে কাজ করে আপনি এই long
কেসটি সমাধান করতে পারেন।