উত্তর:
+
একটি বর্গ পদ্ধতির -
জন্য এবং একটি উদাহরণ পদ্ধতির জন্য।
যেমন
// Not actually Apple's code.
@interface NSArray : NSObject {
}
+ (NSArray *)array;
- (id)objectAtIndex:(NSUInteger)index;
@end
// somewhere else:
id myArray = [NSArray array]; // see how the message is sent to NSArray?
id obj = [myArray objectAtIndex:4]; // here the message is sent to myArray
// Btw, in production code one uses "NSArray *myArray" instead of only "id".
আছে শ্রেণী এবং উদাহরণস্বরূপ পদ্ধতিগুলির মধ্যে পার্থক্য সঙ্গে তার আচরণ আরেকটি প্রশ্ন ।
@classmethod
এবং @method
খুব তাই। কেন এত জ্বলজ্বল ...?
(+) শ্রেণি পদ্ধতিগুলির জন্য এবং (-) উদাহরণ পদ্ধতির জন্য,
(+) শ্রেণি পদ্ধতি: -
স্ট্যাটিক হিসাবে ঘোষণা করা হয় যা পদ্ধতি। ক্লাসের উদাহরণ তৈরি না করেই পদ্ধতিটি বলা যেতে পারে। ক্লাস পদ্ধতিগুলি কেবল শ্রেণীর সদস্যদের উপরই পরিচালনা করতে পারে এবং উদাহরণের সদস্যদের জন্য নয় কারণ শ্রেণি পদ্ধতিগুলি উদাহরণ সদস্যদের সম্পর্কে অজানা। শ্রেণীর ইনস্ট্যান্স পদ্ধতিগুলিও শ্রেণীর কোনও পদ্ধতির মধ্যে থেকে কল করা যায় না যতক্ষণ না সেগুলি শ্রেণীর উদাহরণ হিসাবে ডাকা হয় না।
(-) তাত্ক্ষণিক পদ্ধতি: -
অন্যদিকে শ্রেণিটির নামকরণের আগে তাদের উপস্থিতির একটি উদাহরণ প্রয়োজন, সুতরাং নতুন কীওয়ার্ড ব্যবহার করে কোনও শ্রেণির উদাহরণ তৈরি করা দরকার। ইনস্ট্যান্স পদ্ধতি ক্লাসের নির্দিষ্ট উদাহরণগুলিতে কাজ করে। তাত্ক্ষণিক পদ্ধতিগুলি স্থির হিসাবে ঘোষণা করা হয় না।
কিভাবে তৈরি করবেন?
@interface CustomClass : NSObject
+ (void)classMethod;
- (void)instanceMethod;
@end
ব্যবহারবিধি?
[CustomClass classMethod];
CustomClass *classObject = [[CustomClass alloc] init];
[classObject instanceMethod];
+ পদ্ধতি হ'ল শ্রেণিবদ্ধ পদ্ধতি - যা এমন পদ্ধতিগুলির মধ্যে যা উদাহরণগুলির বৈশিষ্ট্যগুলিতে অ্যাক্সেস পায় না। শ্রেণীর জন্য বরাদ্দ বা সহায়তা পদ্ধতির মতো পদ্ধতির জন্য ব্যবহার করা হয় যা দৃষ্টান্ত ভেরিয়েবলগুলির অ্যাক্সেসের প্রয়োজন হয় না
- পদ্ধতিগুলি হ'ল উদাহরণ পদ্ধতি - কোনও বস্তুর একক উদাহরণের সাথে সম্পর্কিত। সাধারণত ক্লাসে বেশিরভাগ পদ্ধতির জন্য ব্যবহৃত হয়।
দেখুন ভাষা নির্দিষ্টকরণ আরো বিস্তারিত জন্য।
self
নয়, বরং শ্রেণি রয়েছে। এগুলি কেবল কোনও উদাহরণের সাথে সম্পর্কিত নয় এবং পদ্ধতিটির চেহারা উদাহরণের মাধ্যমে নয়, ক্লাসের মাধ্যমে। তবুও, আপনি করতে পেরেছিলেন+exchangeIVarOf: (MYObject*)a with: (MYObject*)b { MYObject* x = a->ivar; a->ivar = b->ivar; b->ivar = x; }
অ্যাপল থেকে এর এর চূড়ান্ত ব্যাখ্যাটি এখানে 'পদ্ধতি এবং বার্তা' বিভাগের অধীনে রয়েছে:
সংক্ষেপে:
(ক্লাসটি ইনস্ট্যান্টিয়েটেড হওয়ার উদাহরণ ছাড়াই পদ্ধতিটি কল করা যেতে পারে)। সুতরাং আপনি এটিকে কল করুন:
[className classMethod];
আপনাকে প্রথমে কোনও অবজেক্ট ইনস্ট্যান্ট করতে হবে, তারপরে আপনি বস্তুটিতে পদ্ধতিটি কল করতে পারেন)। আপনি ম্যানুয়ালি এই জাতীয় কোনও বস্তু ইনস্ট্যান্ট করতে পারেন:
SomeClass* myInstance = [[SomeClass alloc] init];
(এই মূলত বস্তুর জন্য বরাদ্দ মেমরির স্থান তারপর যে স্থান বস্তুর initalises -। একটি অতিসরলীকরণ কিন্তু একটি ভাল উপায় এটি সম্পর্কে চিন্তা করা আপনি alloc এবং আলাদাভাবে কিন্তু বস্তুর init করতে কখনো এই কাজ - এটা পয়েন্টার এর সাথে সম্পর্কিত কদর্য বিষয় হতে পারে এবং মেমরি পরিচালনা)
তারপরে উদাহরণ পদ্ধতিতে কল করুন:
[myInstance instanceMethod]
উদ্দেশ্য সিতে কোনও বস্তুর উদাহরণ পাওয়ার বিকল্প বিকল্পটি এরকম:
NSNumber *myNumber = [NSNumber numberWithInt:123];
যা NSNumber বর্গের 'numberWithInt' শ্রেণির পদ্ধতিটিকে কল করছে , এটি একটি 'ফ্যাক্টরি' পদ্ধতি (অর্থাত্ কোনও পদ্ধতি যা আপনাকে কোনও অবজেক্টের 'রেডিমেড উদাহরণ সরবরাহ করে')।
উদ্দেশ্য সিও নির্দিষ্ট সিনট্যাক্স ব্যবহার করে সরাসরি কিছু নির্দিষ্ট বস্তু তৈরির অনুমতি দেয় যেমন স্ট্রিংয়ের ক্ষেত্রে:
এনএসএসটিং * মাইস্ট্রিংআইন্সটেন্স = @ "এবিসি";