রবার্ট ম্যাকনালির দু'বছর আগে কিছুটা কম আগে "দ্য কোড কমান্ডমেন্টস: অবজেক্টিভ-সি কোডিংয়ের সেরা অনুশীলন" নামক একটি নিবন্ধ পড়ার পরে , আমি আমার উদ্দেশ্য-সি শ্রেণীর প্রতিটি ডেটা সদস্যের জন্য সম্পত্তি ব্যবহার করার অভ্যাসটি গ্রহণ করেছি ( ২০১২ সালের মে হিসাবে তৃতীয় আদেশটি)। ম্যাকনলি এগুলি করার জন্য এই কারণগুলি তালিকাভুক্ত করে (আমার জোর):
- বৈশিষ্ট্য অ্যাক্সেস বিধিনিষেধ প্রয়োগ করে (যেমন পঠনযোগ্য)
- বৈশিষ্ট্য মেমরি পরিচালনা নীতি প্রয়োগ করে (শক্তিশালী, দুর্বল)
- বৈশিষ্ট্যগুলি স্বচ্ছভাবে কাস্টম সেটার এবং গেটারগুলি বাস্তবায়নের সুযোগ সরবরাহ করে।
- কাস্টম সেটটার বা গেটরস সহ বৈশিষ্ট্যগুলি থ্রেড-সুরক্ষা কৌশল প্রয়োগ করতে ব্যবহার করা যেতে পারে।
- উদাহরণ ভেরিয়েবলগুলি অ্যাক্সেস করার একক উপায় থাকার ফলে কোডের পঠনযোগ্যতা বৃদ্ধি পায়।
আমি আমার বেশিরভাগ সম্পত্তি ব্যক্তিগত বিভাগগুলিতে রেখেছি, সুতরাং 1 এবং 4 নম্বরটি সাধারণত আমি ইস্যু করে না এমন বিষয় হয় না। 3 এবং 5 টি আর্গুমেন্টগুলি আরও 'নরম', এবং সঠিক সরঞ্জাম এবং অন্যান্য ধারাবাহিকতায় তারা অ-ইস্যুতে পরিণত হতে পারে। সুতরাং অবশেষে, আমার কাছে এই যুক্তিগুলির মধ্যে সবচেয়ে প্রভাবশালী ছিল 2 নম্বর, মেমরি পরিচালনা। আমি তখন থেকেই এটি করে আসছি।
@property (nonatomic, strong) id object; // Properties became my friends.
আমার শেষ কয়েকটি প্রকল্পের জন্য আমি এআরসি ব্যবহার শুরু করেছি, যা আমার সন্দেহ তৈরি করেছিল যে কোনও কিছুর জন্য সম্পত্তি তৈরি করা এখনও একটি ভাল ধারণা বা সম্ভবত কিছুটা অতিরিক্ত অতিরিক্ত। এআরসি আমার জন্য অবজেক্টিভ-সি অবজেক্টগুলি মেমোরি পরিচালনা করার যত্ন নেয়, যা বেশিরভাগ strong
সদস্যের জন্য যদি আপনি কেবল আইভারগুলি ঘোষণা করেন তবে এটি ভাল কাজ করে। সি-প্রকারগুলি আপনাকে আরআরসি এর আগে ও পরে ম্যানুয়ালি ম্যানেজ করতে হয়েছিল এবং weak
বৈশিষ্ট্যগুলি বেশিরভাগই পাবলিক।
অবশ্যই আমি এখনও ক্লাসের বাইরে থেকে অ্যাক্সেসের প্রয়োজন এমন যে কোনও জিনিসের জন্য বৈশিষ্ট্যগুলি ব্যবহার করি তবে সেগুলি বেশিরভাগই কেবল হাতে গোনা কয়েকটি সম্পত্তি থাকে, যখন বেশিরভাগ ডেটা সদস্যকে বাস্তবায়ন শিরোনামের অধীনে আইভার হিসাবে তালিকাভুক্ত করা হয় while
@implementation GTWeekViewController
{
UILongPressGestureRecognizer *_pressRecognizer;
GTPagingGestureRecognizer *_pagingRecognizer;
UITapGestureRecognizer *_tapRecognizer;
}
একটি পরীক্ষা হিসাবে আমি এটি আরও কিছুটা কঠোরভাবে করে চলেছি, এবং সমস্ত কিছুর জন্য সম্পত্তি থেকে দূরে সরে যাওয়ার কিছু ভাল ইতিবাচক পার্শ্ব প্রতিক্রিয়া রয়েছে।
- ডেটা সদস্য কোড প্রয়োজনীয়তা (
@property
/@synthesize
) সঙ্কুচিত হয়ে কেবল আইভার ঘোষণায়। - আমার বেশিরভাগ
self.something
রেফারেন্স ঠিক পর্যন্ত পরিষ্কার করা হয়েছে_something
। - কোন ডেটা সদস্যরা ব্যক্তিগত (আইভারস) এবং কোনগুলি সর্বজনীন (সম্পত্তি) তা সহজেই পার্থক্যযোগ্য।
- শেষ অবধি, এটি 'অনুভূত' এর চেয়ে বেশি এরকম কারণটি ছিল অ্যাপল যে উদ্দেশ্যে উদ্দেশ্যে করা সম্পত্তি ছিল, তবে এটি বিষয়গত অনুমান।
প্রশ্নটির দিকে : আমি বাস্তবায়ন-আইভরের পক্ষে কম এবং কম সম্পত্তি ব্যবহার করে ধীরে ধীরে অন্ধকার দিকে সরে যাচ্ছি। আমাকে কেন সমস্ত কিছুর জন্য সম্পত্তি ব্যবহার করতে হবে, বা আমার চিন্তাভাবনার ট্রেনটি নিশ্চিত করতে হবে যে কেন কেবল যেখানে প্রয়োজন সেখানে আমাকে আরও আইভার এবং কম সম্পত্তি ব্যবহার করা উচিত কেন আপনি কি আমাকে কিছুটা যুক্তি দিয়ে দিতে পারেন? উভয় পক্ষের জন্য সবচেয়ে প্ররোচক উত্তরটি আমার চিহ্নটি গ্রহণ করবে।
সম্পাদনা: ম্যাকনলি টুইটারে ওজন রেখে বলেছিলেন : "আমি মনে করি সম্পত্তিগুলির সাথে স্টিকিংয়ের মূল কারণটি হ'ল: সমস্ত কিছু করার একটি উপায়, যা সবকিছু করে (কেভিসি / কেভিও সহ।)"