উত্তরটি ... ভাল ... সাধারণ। সরলতা এবং ধারাবাহিকতা, আসলে।
অবজেক্টিভ-সি পদ্ধতি প্রেরণের মুহুর্তে খাঁটি গতিশীল। বিশেষত, প্রতিটি পদ্ধতির প্রেরণ প্রতিটি অন্যান্য পদ্ধতির প্রেরণের মতো ঠিক একই গতিশীল পদ্ধতির রেজোলিউশন পয়েন্টটি দিয়ে যায়। রানটাইম সময়ে, প্রতিটি পদ্ধতির প্রয়োগের ক্ষেত্রে হুবহু একই এক্সপোজার থাকে এবং উদ্দেশ্য ও সি রানটাইম দ্বারা সরবরাহিত সমস্ত API গুলি যা পদ্ধতি এবং নির্বাচকদের সাথে কাজ করে সমস্ত পদ্ধতিতে সমানভাবে একইভাবে কাজ করে।
অনেকে উত্তর দিয়েছেন (উভয় এখানে এবং অন্যান্য প্রশ্নে), সংকলন-সময় ব্যক্তিগত পদ্ধতিগুলি সমর্থিত; কোনও শ্রেণি যদি সর্বজনীনভাবে উপলব্ধ ইন্টারফেসে কোনও পদ্ধতি ঘোষণা না করে তবে আপনার কোড সম্পর্কিত যতটা পদ্ধতি রয়েছে ততক্ষণে সেই পদ্ধতিটি বিদ্যমান থাকতে পারে। অন্য কথায়, আপনি আপনার প্রকল্পটি যথাযথভাবে সংগঠিত করে সংকলনের সময় পছন্দসই দৃশ্যমানতার বিভিন্ন সংমিশ্রণের সমস্ত অর্জন করতে পারেন।
রানটাইমে একই কার্যকারিতাটির নকল করার খুব সুবিধা নেই। এটি একটি বিশাল পরিমাণে জটিলতা এবং ওভারহেড যুক্ত করবে। এমনকি সেই সমস্ত জটিলতার পরেও, এটি এখনও আপনার অনুমিত "ব্যক্তিগত" পদ্ধতিগুলি সম্পাদন থেকে সর্বাধিক নৈমিত্তিক বিকাশকারী ব্যতীত বাধা দেয় না।
সম্পাদনা: একটি অনুমান আমি লক্ষ্য করেছি যে ব্যক্তিগত বার্তাগুলি রানটাইমের মধ্য দিয়ে যেতে হবে যার ফলে সম্ভাব্য বড় ওভারহেড হবে। এটা কি একেবারেই সত্য?
হ্যাঁ, তাই অনুমান করার কোনও কারণ নেই যে কোনও শ্রেণির প্রয়োগকারী বাস্তবায়নের ক্ষেত্রে নির্ধারিত অবজেক্টিভ-সি বৈশিষ্ট্যটি সমস্ত ব্যবহার করতে চান না, এবং এর অর্থ গতিশীল প্রেরণা অবশ্যই ঘটবে। তবে , কোনও বিশেষ বৈকল্পিক দ্বারা ব্যক্তিগত পদ্ধতিগুলি প্রেরণ করতে না পারার কোনও কারণ নেই objc_msgSend()
, কারণ সংকলকটি জানতে পারে যে তারা ব্যক্তিগত ছিল; অর্থাত্ Class
স্ট্রাক্টারে ব্যক্তিগত-একমাত্র পদ্ধতি সারণী যুক্ত করে এটি অর্জন করা যেতে পারে ।
কোনও ব্যক্তিগত পদ্ধতিতে এই চেক শর্ট সার্কিট করার বা রানটাইম এড়িয়ে যাওয়ার কোনও উপায় থাকবে না?
এটি রানটাইম এড়িয়ে যেতে পারেনি, তবে রানটাইমটি অগত্যা ব্যক্তিগত পদ্ধতিগুলির জন্য কোনও চেকিং করতে হবে না ।
এটি বলেছিল, এর কোনও কারণ নেই যে তৃতীয় পক্ষের ইচ্ছাকৃতভাবে objc_msgSendPrivate()
কোনও বস্তুর সাথে এই বস্তুর প্রয়োগের বাইরে কল করতে পারে না এবং কিছু জিনিস (উদাহরণস্বরূপ কেভিও) করতে হবে। কার্যত, এটি একটি কনভেনশন হতে পারে এবং ব্যক্তিগত পদ্ধতিগুলির নির্বাচকদের উপসর্গ করা বা ইন্টারফেস শিরোনামে তাদের উল্লেখ না করার চেয়ে অনুশীলনে কিছুটা ভাল।
যদিও এটি করা ভাষার বিশুদ্ধ গতিশীল প্রকৃতিকে ক্ষুণ্ন করবে। আর প্রতিটি পদ্ধতির প্রেরণটি অভিন্ন প্রেরণ প্রক্রিয়াটির মধ্য দিয়ে যাবে না। পরিবর্তে, আপনাকে এমন পরিস্থিতিতে ফেলে রাখা হবে যেখানে বেশিরভাগ পদ্ধতি এক উপায়ে আচরণ করে এবং একটি ছোট মুষ্টিমেয় কিছুটা আলাদা।
এটি রানটাইম ছাড়িয়েও প্রসারিত হয়েছে কারণ উদ্দেশ্যমূলক-সি এর ধারাবাহিক গতিশীলতার শীর্ষে কোকোতে নির্মিত অনেকগুলি প্রক্রিয়া রয়েছে। উদাহরণস্বরূপ, কী ভ্যালু কোডিং এবং কী মান পর্যবেক্ষণ উভয়কেই ব্যক্তিগত পদ্ধতিগুলি সমর্থন করার জন্য খুব ভারী পরিবর্তন করতে হবে - সম্ভবত কোনও শোষণমূলক লুফোল তৈরি করে - বা ব্যক্তিগত পদ্ধতিগুলি বেমানান হবে।