উত্তর:
সঠিক, উদ্দেশ্য-সি পদ্ধতি ওভারলোডিং সমর্থন করে না, তাই আপনাকে বিভিন্ন পদ্ধতির নাম ব্যবহার করতে হবে।
দ্রষ্টব্য, যদিও, "পদ্ধতির নাম" -এ পদ্ধতিতে স্বাক্ষরকারী কীওয়ার্ডগুলি রয়েছে (":" এর আগে উপস্থিত প্যারামিটারের নামগুলি), সুতরাং তারা দুটি "রাইটটফাইলে" শুরু করলেও নিম্নলিখিত দুটি ভিন্ন পদ্ধতি রয়েছে:
-(void) writeToFile:(NSString *)path fromInt:(int)anInt;
-(void) writeToFile:(NSString *)path fromString:(NSString *)aString;
(দুটি পদ্ধতির নাম হ'ল "WritToFile: fromInt:" এবং "WritToFile: fromString:")।
এটি উল্লেখযোগ্য হতে পারে যে যদিও ওজেক্টিভ-সি পদ্ধতি ওভারলোডিংকে সমর্থন না করে তবে ক্ল্যাং + এলএলভিএম সি জন্য ফাংশন ওভারলোডিং সমর্থন করে যদিও আপনি যা খুঁজছেন তা না হলেও এটি কিছু পরিস্থিতিতে কার্যকর প্রমাণিত হতে পারে (উদাহরণস্বরূপ, যখন বাস্তবায়ন সামান্য গভীর ক্ষত (এনক্যাপস্যুলেশন পরিপন্থী) সংস্করণ এর পরিদর্শক নকশা প্যাটার্ন )
ফাংশন ওভারলোডিং কীভাবে কাজ করে তার একটি সাধারণ উদাহরণ এখানে:
__attribute__((overloadable)) float area(Circle * this)
{
return M_PI*this.radius*this.radius;
}
__attribute__((overloadable)) float area(Rectangle * this)
{
return this.w*this.h;
}
//...
//In your Obj-C methods you can call:
NSLog(@"%f %f", area(rect), area(circle));
id
এবং কেন তা isKindOfClass:
নিষ্পত্তি করা হবে তা ভিন্ন গল্প ...
id
এবং isKindOfClass:
বেশিরভাগ ব্যবহারিক পরিস্থিতিতে .েকে রাখছি । আপনি ওভারলোডিং পছন্দ করতে পারেন তার একটি কারণ, সর্বাধিক নির্দিষ্ট ধরণের ক্যাটারডের স্বয়ংক্রিয় নির্বাচন যা স্বতন্ত্র ধরণের চেকিংয়ের সাথে বজায় রাখতে একটি ছোট ওভারহেডকে ব্যয় করবে।
ডেভিড সেই পদ্ধতিতে সঠিক যে ওভারলোডিং উদ্দেশ্য-সিটিতে সমর্থিত নয় supported এটি সেই অর্থে পিএইচপি এর অনুরূপ। যেমনটি তিনি উল্লেখ করেছেন, তিনি যেভাবে উদাহরণ দিয়েছিলেন তার মধ্যে দুটি বা তারও বেশি পদ্ধতির বিভিন্ন স্বাক্ষর দিয়ে সংজ্ঞায়িত করা সাধারণ অনুশীলন। তবে "আইডি" টাইপ ব্যবহার করে একটি পদ্ধতি তৈরি করাও সম্ভব। "আইডি" টাইপের মাধ্যমে আপনি যেকোন অবজেক্ট (এবং এনএসএনম্বার ক্লাস ব্যবহার করে যে কোনও আদিম) পাঠাতে পারবেন এবং তারপরে মেথডের মধ্যে থেকেই আপনি এর ধরণটি পরীক্ষা করতে পারেন এবং প্রয়োজনে উপযুক্ত ব্যতিক্রম নিক্ষেপ করতে পারেন। যদিও এতে সামান্য পারফরম্যান্স হিট হয়েছে, আপনি সম্ভবত প্রচুর পরিমাণে ডেটা প্রক্রিয়াকরণ না করা হলে এটি সম্ভবত নামমাত্র বা তুচ্ছ হতে পারে।
- (void) writeToFile: (NSString *)path fromObject: (id)object {
if (!([object isKindOfClass: [NSNumber class]] || [object isKindOfClass: [NSString class]])) {
@throw [NSException exceptionWithName: @"InvalidArgumentException" reason: @"Unrecognized parameter type." userInfo: nil];
}
}
এটি অবজেক্টের ধরণের প্রয়োগের জন্য একটি প্রোটোকল প্রয়োগ করার জন্য একটি সুন্দর জায়গা, যা এটির মতো করা যায়:
(id<MyProtocol>)object