একটি BOOL সম্পত্তি ব্যবহার করা


111

অ্যাপল এইভাবে কোনও বোল সম্পত্তি ঘোষণা করার পরামর্শ দেয়:

@property (nonatomic, assign, getter=isWorking) BOOL working;

যেহেতু আমি উদ্দেশ্য-সি 2.0 বৈশিষ্ট্য এবং ডট স্বরলিপি ব্যবহার করছি, আমি এই সম্পত্তিটি ব্যবহার করে অ্যাক্সেস করছি self.working। আমি জানি যে আমিও ব্যবহার করতে [self isWorking]পারি - তবে আমার দরকার নেই।

সুতরাং, যেহেতু আমি সর্বত্র ডট স্বরলিপি ব্যবহার করছি, কেন আমি অতিরিক্ত সম্পত্তি সংজ্ঞায়িত করব? এটা সহজ লিখতে হবে

@property (nonatomic, assign) BOOL working;

বা getter=isWorkingআমার ক্ষেত্রে আমার কোনও সুবিধা আছে (ডট স্বরলিপি ব্যবহার)?

ধন্যবাদ!


4
এটি কি সিনটিক ভিত্তিক প্রস্তাবনা নয়? সুতরাং মাইকার.আইস ওয়ার্কিং মাইকার.ওয়ার্কিংয়ের চেয়ে শব্দার্থগতভাবে আরও নির্ভুল হবে
15:

উত্তর:


206

অ্যাপল কেবল isXস্টাইলিস্টিক উদ্দেশ্যে গেটার হিসাবে ঘোষণা করার পরামর্শ দেয় । আপনি যতক্ষণ না সঠিক নামটি দিয়ে ডট স্বরলিপি বা বার্তা স্বরলিপি ব্যবহার করেন ততক্ষণ আপনি প্রযোজকের নামটি কাস্টমাইজ করেছেন কিনা তা বিবেচ্য নয়। আপনি যদি ডট স্বরলিপিটি ব্যবহার করতে যাচ্ছেন তবে এতে কোনও পার্থক্য নেই, আপনি এখনও সম্পত্তিটির নামে এটি অ্যাক্সেস করতে পারেন:

@property (nonatomic, assign) BOOL working;

[self setWorking:YES];         // Or self.working = YES;
BOOL working = [self working]; // Or = self.working;

অথবা

@property (nonatomic, assign, getter=isWorking) BOOL working;

[self setWorking:YES];           // Or self.working = YES;, same as above
BOOL working = [self isWorking]; // Or = self.working;, also same as above

4
অবশ্যই এটি কেবল স্টাইলিস্টিক উদ্দেশ্যগুলির চেয়ে মূল কোডিং কোডিং অনুসারে কাজ করা?
জাসারিন

5
এটি কিছুটা আশ্চর্যের বিষয় যে অ্যাপল get গেটারদের ঘোষণার প্রস্তাবisX দিলেও এক্সকোড সেগুলি স্বয়ংক্রিয়ভাবে সমাপ্তি পপআপে তালিকাভুক্ত করতে সক্ষম নয় । (আমার উদাহরণে) workingসেখানে তালিকাভুক্ত করা হয়েছে, তবে isWorkingতা নেই। সুতরাং আমি BOOL প্রাপ্তকারীদের ঘোষণায় কোনও সুবিধা দেখছি না। এগুলি ব্যবহারের জন্য সক্ষম হওয়ার জন্য আমাকে আরও কিছু করতে হবে (জেটর ঘোষণা করুন) তবে আমি কম পেয়েছি (কোনও স্বয়ংক্রিয় সমাপ্তি নেই)।
প্যাট্রিক

4

অ্যাপল স্টাইলিস্টিক উদ্দেশ্যে প্রস্তাবিত I আপনি এই কোডটি লিখলে:

@property (nonatomic,assign) BOOL working;

তারপরে আপনি [অবজেক্টটি ওয়ার্কিং] ব্যবহার করতে পারবেন না।
এটি একটি ত্রুটি প্রদর্শন করবে। আপনি যদি কোডের নীচে ব্যবহার করেন তবে

@property (assign,getter=isWorking) BOOL working;

সুতরাং আপনি [অবজেক্ট ইজ ওয়ার্কিং] ব্যবহার করতে পারেন।


-26

আদিম ধরণের বৈশিষ্ট্যগুলি ব্যবহার করার কোনও সুবিধা নেই। @propertyবরাদ্দ গাদা সঙ্গে ব্যবহার করা হয় NSObjectsমত NSString*, NSNumber*, UIButton*,, এবং ইত্যাদি কারণ মেমরির পরিচালিত accessors বিনামূল্যে জন্য তৈরি করা হয়। আপনি যখন একটি তৈরি করেন BOOL, মানটি সর্বদা স্ট্যাকের জন্য বরাদ্দ করা হয় এবং মেমরির ফুটো প্রতিরোধের জন্য কোনও বিশেষ অ্যাকসেসরের প্রয়োজন হয় না। isWorkingকেবল একটি বুলিয়ান মানকে প্রকাশ করার জনপ্রিয় উপায়।

অন্য ওও ভাষায় আপনি একটি পরিবর্তনশীল private bool working;এবং দুটি অ্যাকসেসর তৈরি করতে পারবেন : SetWorkingসেটার এবং IsWorkingঅ্যাকসেসরের জন্য।


1
আপনি তার প্রশ্নের উত্তর দিচ্ছেন না, অর্থাত্ সম্পত্তির চেয়ে স্পষ্টভাবে গেটারের নামকরণের উদ্দেশ্য কী (তিনি যদি সম্পত্তিগুলি ভাল ধারণা না তা জিজ্ঞাসা করছেন না)। এছাড়াও, সম্পত্তিগুলি কেভিও এবং কেভিসির জন্য মঞ্জুরি দেয়, তাই আপনি যে পয়েন্টটি করেন সেটি বিভ্রান্তিকর।
মার্টিন Gjaldbaek

আপনি ঠিক বলেছেন যে আমি আদিম বৈশিষ্ট্যযুক্ত কেভিও এবং কেভিসি ব্যবহারকে উপেক্ষা করেছি। আমি মনে করি যে থ্রেডের প্রত্যেকে ইশওয়ার্কিং সম্পর্কিত তার প্রশ্নে বক্তৃতা দিচ্ছেন - এটি একটি নামকরণের সম্মেলন।
থমসন কমার

25
এটি সম্পূর্ণ ভুল; @propertyখুব আদিম ধরণের সাথে ব্যবহার করার উদ্দেশ্যে এবং এটি কেবলমাত্র ধারাবাহিকতার জন্য, এর উল্লেখযোগ্য সুবিধা রয়েছে। তদুপরি, কিছু আদিম প্রকার (32 বিট সিপিইউগুলিতে 64 বিট প্রকার এবং 32 এবং 64 বিট সিপিইউগুলিতে 128 বিট প্রকারগুলি) অ্যাসাইনমেন্টে অ-পারমাণবিক; @propertyএর ক্ষেত্রেও পারমাণবিকতা সুবিধাজনক হতে পারে।
বুবুম

1
আকর্ষণীয় - তবে হেক আমার কীভাবে তা জানা উচিত? :) এটি কি বৈশিষ্ট্য atomicএবং nonatomicগুণাবলীর অন্তর্নিহিততা ?
থমসন কমার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.