আমি পড়ছিলাম যে এনএসআর্রে ঠিক এমন একটি জিনিস। ভারী লাগছে। আমার ডেস্কে ওজেক্টিভ-সি, কোকো এবং সি সম্পর্কে 7 টি সত্যই চর্বিযুক্ত বই রয়েছে যার মধ্যে কোনওটিই ক্লাস ক্লাস্টারের উল্লেখ করেনি, কমপক্ষে বইগুলির পিছনে সূচীতে এটি খুঁজে পাচ্ছি না। তা কি?
আমি পড়ছিলাম যে এনএসআর্রে ঠিক এমন একটি জিনিস। ভারী লাগছে। আমার ডেস্কে ওজেক্টিভ-সি, কোকো এবং সি সম্পর্কে 7 টি সত্যই চর্বিযুক্ত বই রয়েছে যার মধ্যে কোনওটিই ক্লাস ক্লাস্টারের উল্লেখ করেনি, কমপক্ষে বইগুলির পিছনে সূচীতে এটি খুঁজে পাচ্ছি না। তা কি?
উত্তর:
অ্যাপলের ডক্স থেকে ... । সংক্ষেপে এটি ফাউন্ডেশনের কাঠামোতে ব্যবহৃত একটি নকশার প্যাটার্ন, এটি সম্ভবত ওবিজির বইগুলিতে উল্লেখ করা হয়নি।
ক্লাস ক্লাস্টার এমন একটি আর্কিটেকচার যা একটি পাবলিক, অ্যাবস্ট্রাক্ট সুপারক্লাসের অধীনে বেশ কয়েকটি বেসরকারী, কংক্রিট সাবক্লাসকে বিভক্ত করে। এইভাবে শ্রেণীর গোষ্ঠীকরণটি ব্যবহারকারীর জন্য একটি সরলীকৃত ইন্টারফেস সরবরাহ করে, যিনি কেবল প্রকাশ্যে দৃশ্যমান আর্কিটেকচারটি দেখেন।
আমি জানি না যে সিডিপিতে কী রয়েছে যা স্টিভ রেফারেন্স করেছে তবে মূলত অবজেক্টিভ-সি ক্লাস ক্লাস্টার এমন একটি কনস্ট্রাক্ট যা বিমূর্ত কারখানার প্যাটার্ন বাস্তবায়নের জন্য সমর্থন করে।
ধারণা সহজ : আপনি একটি কারখানার প্রদান করতে চান (ক্লাস্টার) ইন্টারফেস যে, ন্যূনতম বর্ণনা দিয়ে, উত্পাদন এবং আয় একটি কারখানা অবজেক্ট একটি নির্দিষ্ট কংক্রিট উদাহরণ হিসেবে বলা যায় মাফিক কারখানার (ক্লাস্টার) ইন্টারফেস দ্বারা বর্ণিত ক্লাস্টার পরিবারের আচরণ।
একটি সাধারণ কংক্রিটের উদাহরণ : এই উদাহরণটি একটি হাসির কারখানা সরবরাহ করে যা নির্দিষ্ট হাসির ধরণের কংক্রিট শ্রেণি তৈরি করে (যেমন গফা, জিগল)। হাসি দৃষ্টিতে হাসি: পদ্ধতিতে মনোযোগ দিন ।
হাসিতে:
#define kLaughWithGuffaw 1
#define kLaughWithGiggle 2
@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end
হাসতে হাসতে:
@interface Guffaws:Laugh {}
- (void) laugh;
@end
@interface Giggles:Laugh {}
- (void) laugh;
@end
@implementation Laugh
- (Laugh *) initWithLaughter:(NSUInteger) laugherType {
id instanceReturn=nil;
; // Removed for ARC [self release]
if ( laughterType == kLaughWithGuffaw )
instanceReturn = [[Guffaws alloc]init];
else if( laughterType == kLaughWithGiggle )
instanceReturn = [[Giggles alloc]init];
else
; // deal with this
return instanceReturn;
}
- (void) laugh {
NSLog(@"Humbug");
}
@end
@implementation Guffaws
- (void) laugh {
NSLog(@"OH HA HA HOWAH HA HA HA");
}
@end
@implementation Giggles
- (void) laugh {
NSLog(@"Tee hee");
}
@end
.m-file
।
init
পদ্ধতিতে নিজেকে ছেড়ে দেওয়া এবং অন্য কিছু ফিরিয়ে দেওয়া কতটা নিরাপদ ? অ্যাপল থেকে এমন কোনও কোডের উদাহরণ রয়েছে যেখানে তারা এটি করে? (২) এছাড়াও, আপনি সম্ভবত কোড সহ একটি উদাহরণ তৈরি করছেন [[Laugh alloc] initWithLaughter:kLaughWithGiggle]
। কীভাবে Laugh
অপ্রয়োজনীয়ভাবে বরাদ্দ দেওয়া হচ্ছে তা লক্ষ্য করুন , যেহেতু এই কল করার পরে এটি প্রকাশ করা হবে। আপনি যখন কোনও শ্রেণি পদ্ধতি তৈরি করতে পারেন যখন [Laugh laughWithLaughter:kLaughWithGiggle]
উপরের 1 এবং 2 বিষয়গুলি এড়িয়ে গিয়ে আপনাকে ব্যক্তিগত সাবক্লাসের সমস্ত সুবিধা দেয় কেন?
+alloc
একটি একক কারখানার ক্লাস প্রদান করে যা বিভিন্ন -initWith:
পদ্ধতি প্রয়োগ করে । ফ্যাক্টরি শ্রেণির -initWith:
পদ্ধতিগুলি তখন প্রদত্ত পদ্ধতির পরামিতিগুলির উপর ভিত্তি করে একটি কংক্রিট সাবক্লাস বরাদ্দকরণ এবং প্রারম্ভিককরণের জন্য দায়ী, যদি প্রয়োজন হয় বা কিছু ক্ষেত্রে কিছু বরাদ্দ নাও করতে পারে (যেমন -[NSString initWithString:]
)। আপনি ফেরত মূল্য এ পরিদর্শন দ্বারা এটা চেষ্টা করতে পারেন +[NSString alloc]
, +[NSArray alloc]
ইত্যাদি
গ্লসারি, ক্লাস্টারে 498 পৃষ্ঠায় স্টিফেন কোচানের উদ্দেশ্য সি তে প্রোগ্রামিং থেকে:
একটি বিমূর্ত শ্রেণি যা প্রাইভেট কংক্রিট সাবক্লাসগুলির একটি গোষ্ঠী বিভক্ত করে, বিমূর্ত শ্রেণীর মাধ্যমে ব্যবহারকারীকে সরলীকৃত ইন্টারফেস সরবরাহ করে।
ক্লাস ক্লাস্টারগুলি কংক্রিট, প্রাইভেট সাবক্লাস বাস্তবায়নের একটি গ্রুপকে একটি একক পাবলিক ইন্টারফেস সরবরাহ করে। একটি উদ্দেশ্য-সি প্রোগ্রামার ক্লাস ক্লাস্টারগুলি প্রায়শই ব্যবহার করে এবং খুব কমই এটি উপলব্ধি করে - এবং এটি একটি ক্লাস ক্লাস্টারের পুরো পয়েন্ট। ক্লাস ক্লাস্টারের কাজ হ'ল পাবলিক ইন্টারফেসের পিছনে বাস্তবায়নের বিশদটি জটিলতা hide
ফাউন্ডেশন ক্লাসগুলির অনেকগুলি ক্লাস ক্লাস্টার যেমন এনএসএসস্ট্রিং, এনএসআরাই, এনএসডি অভিধান এবং এনএসবার্বার। আপনি যখন [NSString stringWithFormat:]
ক্লাস ক্লাস্টার কল করবেন তখন আপনাকে কিছু কংক্রিট শ্রেণি দিচ্ছে যা NSString
ইন্টারফেস প্রয়োগ করে । এটি একটি হতে পারে NSConcreteString
, NSCFString
, NSFooBarString
, ইত্যাদি কোন ক্লাসে ক্লাস্টার আপনি কন্সট্রাকটর উপর ভিত্তি করে অথবা আপনি আহ্বান করা হয় এবং আর্গুমেন্ট সূচনাকারী হয় দেয়।
এর কারণে, ক্লাস ক্লাস্টারগুলি উদ্দেশ্য-সি প্রোগ্রামিংয়ের অন্যতম ক্ষমতায়ন ধারণা।
আপনি যদি অন্য ভাষা থেকে আগত হন তবে আপনি গ্যাং অফ ফোরের নিদর্শনগুলির সাথে পরিচিত হতে পারেন। ক্লাস ক্লাস্টারে বিমূর্ত কারখানা এবং ফ্যাসাদ ধরণ উভয়ের উপাদান রয়েছে।
অ্যাপলের পাবলিক ডকুমেন্টেশনগুলি ক্লাস ক্লাস্টারগুলিকে (এবং কীভাবে তাদের প্রয়োগ ও প্রসারিত করা যায়) কভার করে quite দুর্ভাগ্যক্রমে, আমি খুঁজে পেয়েছি যে অনেক আইওএস বিকাশকারীদের কাছে এটি এবং অন্যান্য কোকো-নির্দিষ্ট নিদর্শন একটি অন্ধ স্পট।
কোকো কোর প্রতিযোগিতা: ক্লাস ক্লাস্টার
কোকো ফান্ডামেন্টাল গাইড: ক্লাস ক্লাস্টারস
কীভাবে আপনার নিজের ক্লাস ক্লাস্টারগুলি প্রয়োগ করতে হয় তার উদাহরণগুলি গিটহাবটিতে উপলব্ধ
এনএসআরাই ক্লাস ক্লাস্টারটি "হেভিওয়েট" নয়, এটি কোনও কোড প্রয়োগ না করে নির্দিষ্ট প্রয়োগের জন্য আপনার কোড জেনে বা যত্ন ছাড়াই ব্যবহার করা অ্যারে শ্রেণীর অনেকগুলি প্রয়োগের উপায়। হুডের নীচে, এনএসআরির কংক্রিট সাবক্লাসগুলি রয়েছে যা বিভিন্ন ব্যবহারের ক্ষেত্রে উপযুক্ত, যেমন বড়, স্পার্স অ্যারে বা সংকলনের সময় পরিচিত কয়েকটি নির্দিষ্ট উপাদান যুক্ত অ্যারে as
NSArray, NSString এবং NSNumber হল এমন ক্লাস ক্লাস্টার যা আপনি প্রায়শই মুখোমুখি হন।
[myArray isKindOfClass:[NSMutableArray class]]
তবে তা না করা সত্ত্বেও হ্যাঁ ফেরত দেবে না?