প্রথম প্রশ্নটি হল আপনার ধ্রুবকগুলির কী সুযোগ থাকতে চান যা সত্যই দুটি প্রশ্ন:
- এই ধ্রুবকগুলি কি একটি একক শ্রেণীর জন্য নির্দিষ্ট, বা সমস্ত অ্যাপ্লিকেশন জুড়ে এটি বোঝা যায়?
- যদি তারা শ্রেণি-নির্দিষ্ট হয় তবে তারা কি ক্লাসের ক্লায়েন্টদের ব্যবহারের জন্য, বা কেবল শ্রেণীর মধ্যে?
যদি তারা কোনও একক শ্রেণীর জন্য নির্দিষ্ট এবং অভ্যন্তরীণ হয় তবে তাদের static const
.m ফাইলের শীর্ষে হিসাবে ঘোষণা করুন :
static NSString *const MyThingNotificationKey = @"MyThingNotificationKey";
যদি তারা একটি একক শ্রেণীর সাথে সম্পর্কিত তবে অন্য শ্রেণীর দ্বারা প্রকাশ্যে / ব্যবহার করা উচিত, তাদেরকে extern
শিরোনাম হিসাবে ঘোষণা করুন এবং তাদের মি।
//.h
extern NSString *const MyThingNotificationKey;
//.m
NSString *const MyThingNotificationKey = @"MyThingNotificationKey";
যদি তাদের বৈশ্বিক হওয়া উচিত, তাদের একটি শিরোনামে ঘোষণা করুন এবং একটি নির্দিষ্ট মডিউলে তাদের নির্দিষ্ট করুন, বিশেষত const ধ্রুবকদের জন্য।
এগুলি আপনি কীভাবে বৈশ্বিক হতে চান তা বিভিন্ন স্তরের সাথে বিভিন্ন ধ্রুবকগুলির সাথে মিশ্র করতে এবং মেলাতে পারেন এবং বিভিন্ন বৈশ্বিক ধ্রুবকগুলির জন্য যা কেবল একত্রিত হয় না — আপনি এগুলি পৃথক মডিউলগুলিতে রাখতে পারেন, প্রতিটি তার নিজস্ব শিরোলেখের সাথে, যদি আপনি চাই।
না কেন #define
?
পুরানো উত্তরটি হ'ল "ম্যাক্রোগুলির কাছে তেমন তথ্য নেই", তবে সংকলকরা আজ আক্ষরিক (যা ম্যাক্রোগুলি প্রসারিত হয়) পাশাপাশি ভেরিয়েবলগুলির জন্য সমস্ত প্রকারের পরীক্ষা-নিরীক্ষা করার বিষয়ে যথেষ্ট স্মার্ট।
আধুনিক উত্তর হ'ল কারণ ডিবাগারটি আপনার ম্যাক্রোগুলি সম্পর্কে জানতে পারবে না। আপনি [myThing addObserver:self forKey:MyThingNotificationKey]
কোনও ডিবাগার কমান্ডে MyThingNotificationKey
ম্যাক্রো হলে বলতে পারবেন না ; ডিবাগার কেবলমাত্র এটির সম্পর্কে জানতে পারে যদি এটি পরিবর্তনশীল হয়।
না কেন enum
?
ভাল, rmaddy মন্তব্যগুলিতে এটি আমাকে পরাজিত: enum
শুধুমাত্র পূর্ণসংখ্যার ধ্রুবক সংজ্ঞা দিতে পারেন। সিরিয়াল শনাক্তকারী নম্বর, বিট-মাস্কস, চার-বাইট কোড ইত্যাদির মতো জিনিস
এই উদ্দেশ্যে, enum
দুর্দান্ত এবং আপনার একেবারে এটি ব্যবহার করা উচিত। (আরও ভাল, এবং ম্যাক্রোগুলি ব্যবহার করুনNS_ENUM
NS_OPTIONS
)) অন্যান্য জিনিসের জন্য আপনাকে অবশ্যই অন্য কিছু ব্যবহার করতে হবে; enum
পূর্ণসংখ্যা ছাড়া কিছুই করে না।
এবং অন্যান্য প্রশ্ন
আমি সব ফাইলের কনস্ট্যান্টগুলি উপলভ্য করতে Reddit-Prefix.pch ফাইলে ফাইলটি আমদানি করার বিষয়ে ভাবছিলাম। এটি কি জিনিস করার একটি ভাল উপায়?
সম্ভবত নিরীহ, তবে সম্ভবত অতিরিক্ত। আপনার ধ্রুবক হেডার (গুলি) যেখানে আপনার প্রয়োজন সেখানে আমদানি করুন।
এই সমাধানগুলির প্রত্যেকটির ব্যবহারের ক্ষেত্রে কী কী?
#define
: বেশ সীমিত। আমি সত্যই নিশ্চিত নই যে এটিকে আর ধ্রুবকদের জন্য ব্যবহার করার কোনও ভাল কারণ আছে।
const
: স্থানীয় ধ্রুবকদের জন্য সেরা। এছাড়াও, আপনি একটি শিরোনামে ঘোষিত হয়েছিলেন এবং এখন আপনি সংজ্ঞা দিচ্ছেন তার জন্য আপনাকে এটি ব্যবহার করতে হবে।
static const
: ফাইল-নির্দিষ্ট (বা শ্রেণি-নির্দিষ্ট) ধ্রুবকের জন্য সেরা।
extern const
: শিরোনামে ধ্রুবক রফতানি করার সময় আপনাকে অবশ্যই এটি ব্যবহার করতে হবে।
এছাড়াও, যদি ব্যবহার করা হয় তবে extern const
আমার কি ফাইলটি আমদানি করা দরকার, বা ফাইলগুলি আমদানি না করে ধ্রুবকগুলি বিশ্বব্যাপী উপলব্ধ হবে?
আপনি যে ফাইলটি ব্যবহার করেন সেখানে প্রতিটি ফাইল বা উপসর্গ শিরোনামে আপনাকে ফাইলটি আমদানি করতে হবে।