سؤال

كنت أقرأ أن NSArray هو مجرد شيء مثل هذا الشيء. يبدو ثقيلا. لدي 7 كتب سمين حقا هنا على مكتبي حول الهدف - C، Cocoa و C. لا أحد منهم يذكر مجموعة الطبقة على الإطلاق، على الأقل لا يمكنني العثور عليه في الفهرس في الجزء الخلفي من الكتب. إذن ما هذا؟

هل كانت مفيدة؟

المحلول

من مستندات أبل .... وبعد باختصار، إنه نمط تصميم يستخدم في إطار المؤسسة، والذي ربما هو السبب في عدم ذكره في كتب OBJC.

مجموعة من الدرجة هي بنية تضم عدد من الفئات الفئة الفئة الفرعية الخاصة والملموسة تحت Superclass الجمهور مجردة. يوفر مجموعة الطبقات بهذه الطريقة واجهة مبسطة للمستخدم، الذي يرى فقط الهندسة المعمارية المرئية للجمهور.

نصائح أخرى

لا أعرف ما هو في CDP الذي تمت الإشارة إليه ستيف ولكن بشكل أساسي كتلة فئة Class-C الهدف هو بناء يدعم تنفيذ الملخص مصنع نمط.

ال فكرة الأمر بسيط: تريد توفير واجهة مصنع (كتلة)، مع الحد الأدنى من الوصف، وتصنيع وإرجاع مثيل ملموس معين من كائن المصنع الذي يرضي سلوك عائلة الكتلة الموضحة بواسطة واجهة المصنع (الكتلة).

مثال ملموس بسيط: يوفر هذا المثال مصنع الضحك الذي ينتج فصولا ملموسة من أنواع الضحك المحددة (مثل Guffaw، Giggle). الانتباه إلى يضحك initwithlaughone: طريقة.

في الضحك

#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

من البرمجة في الهدف C بواسطة ستيفن كوتشان في الصفحة 498 في المسرد، الكتلة:

فئة مجردة تضم مجموعة من الفئات الفئة الفرعية الخرسانية الخاصة، وتوفير واجهة مبسطة للمستخدم من خلال فئة مجردة.

توفر مجموعات الطبقة واجهة عامة واحدة لمجموعة من تطبيقات الخرسانة والفئة الفرعية الخاصة. يستخدم مبرمج الهدف - C مجموعات فئة في كثير من الأحيان ونادرا ما يدركه - وهذا هو نقطة كلها من كتلة فئة. وظيفة الكتلة الفئة هي إخفاء تعقيد تفاصيل التنفيذ وراء واجهة عامة.

العديد من فئات الأساس هي مجموعات فئة، مثل NSSTRING، NSARRAY، NSDICTIONARY، و NSNumber. عندما تتصل [NSString stringWithFormat:] تمنحك الكتلة الفئة بعض فئة ملموسة تنفذ NSString واجهه المستخدم. يمكن أن يكون NSConcreteString, NSCFString, NSFooBarString, ، وما إلى ذلك الذي يمنحك مجموعة الطبقة المستندة إلى المنشئ أو المهيئ الذي تتصل به والحجج.

ولهذا السبب، تعد مجموعات الفئة واحدة من أكثر المفاهيم تمكينها في البرمجة الموضوعية.

  • من السهل جدا التنفيذ
  • من السهل تغيير التنفيذ الأساسي دون تغيير الرمز الذي يطلق عليه.
  • من السهل توفير تطبيقات ملموسة مختلفة في وقت التشغيل (أي اختبار موارد أو كائنات وهمية)
  • بسبب أعلاه، سهلة الاختبار و Refactor

إذا كنت قادما من لغات أخرى قد تكون على دراية بعصابة أربعة أنماط. مجموعات الطبقة لديها عناصر من كل من المصنع مجردة وأنماط الواجهة.

تغطي الوثائق العامة لشركة Apple مجموعات الفئة (وكيفية تنفيذها وتوسيعها) على نطاق واسع. لسوء الحظ، لقد وجدت أنه بالنسبة للعديد من مطوري iOS هذا وأنماط كاكاو الأخرى هي بقعة عمياء.

الكاكاو الكفاءات الأساسية: الكتلة الطبقة

دليل الأساسيات الكاكاو: مجموعات فئة

أمثلة على كيفية تنفيذ مجموعات الطبقة الخاصة بك متاحة على Github

كتلة Class NSArray ليست "الوزن الثقيل"، إنها وسيلة لأي عدد من تطبيقات صف صفيف لاستخدامها دون معرفة الكود الخاص بك أو رعاية التنفيذ الخاص. تحت غطاء محرك السيارة، هناك فئة فرعية ملموسة من NSArray المناسبة لحالات الاستخدام المختلفة، مثل صفائف كبيرة أو متناثرة، أو صفائف تحتوي على عدد محدد من العناصر المعروفة في تجميع الوقت.

NSARRAY، NSSTRING، و NSNumber هي مجموعات الطبقة التي غالبا ما تصادفها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top