الهدف-C: الحصول على الفئة الحقيقية من الفصول في مجموعات الفصل

StackOverflow https://stackoverflow.com/questions/2840972

سؤال

في الآونة الأخيرة أثناء محاولة الإجابة على أسئلة هنا ، قمت بتشغيل بعض رمز الاختبار لمعرفة كيف أبلغ XCode/GDB عن فئة الحالات في مجموعات الطبقة. (انظر أدناه) في الماضي ، كنت أتوقع أن أرى شيئًا مثل:

PrivateClusterClass:PublicSuperClass:NSObject

مثل هذا (الذي لا يزال يعود كما هو متوقع):

NSPathStore2:NSString:NSObject

... لسلسلة تم إنشاؤها مع +[NSString pathWithComponents:].

ومع ذلك ، مع NSSET والفئة الفرعية الكود التالي:

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    NSSet *s=[NSSet setWithObject:@"setWithObject"];
    NSMutableSet *m=[NSMutableSet setWithCapacity:1];
    [m addObject:@"Added String"];
    NSMutableSet *n = [[NSMutableSet alloc] initWithCapacity:1];
    [self showSuperClasses:s];
    [self showSuperClasses:m];
    [self showSuperClasses:n];
    [self showSuperClasses:@"Steve"];   
}

- (void) showSuperClasses:(id) anObject{
    Class cl = [anObject class];
    NSString *classDescription = [cl description];
    while ([cl superclass]) 
    {
        cl = [cl superclass];
        classDescription = [classDescription stringByAppendingFormat:@":%@", [cl description]];
    }
    NSLog(@"%@ classes=%@",[anObject class], classDescription);
}

... المخرجات:

// NSSet *s
NSCFSet classes=NSCFSet:NSMutableSet:NSSet:NSObject
//NSMutableSet *m
NSCFSet classes=NSCFSet:NSMutableSet:NSSet:NSObject
//NSMutableSet *n
NSCFSet classes=NSCFSet:NSMutableSet:NSSet:NSObject
// NSString @"Steve"
NSCFString classes=NSCFString:NSMutableString:NSString:NSObject

يظهر مصحح الأخطاء نفس الفصل لجميع الحالات المحددة. أعلم أنه في الماضي لم تعود مجموعة Cluster Set مثل هذا.

  1. ماذا تغير؟ (أظن أنه تغيير في الجسر من Core Foundation.)
  2. ما هو تقرير الكتلة الفئة مجرد فئة عامة على سبيل المثال NSCFSET وأي أبلغ عن الفئة الفرعية الفعلية على سبيل المثال NSPATHSTORE2؟
  3. الأهم من ذلك ، عند تصحيح الأخطاء كيف يمكنك تحديد الفئة الفعلية لمثيل مجموعة NSSEST؟
هل كانت مفيدة؟

المحلول

  1. تم تغيير تفاصيل التنفيذ على الأرجح المتعلقة بالجرح إلى راجع إذا نظرت عن كثب ، فسترى أنه يمكن الآن العثور على مجموعة من تطبيقات Objective-C التي تدعم فئات الأساس المختلفة في CoreFoundation.

  2. تفاصيل تنفيذ أخرى. يتغير تنفيذ مجموعات فئة الأساس - في بعض الأحيان بشكل كبير ، وأحيانًا بمهارة - مع كل إصدار من Mac OS X. إن المجموعة الدقيقة من الفئات الخاصة المتعلقة بالتنفيذ المذكور تتدفق بشكل عام من أي مجموعة معينة من المتطلبات اللازمة لتحقيق مرنة مرنة والحل الأمثل بشكل معقول مع الحفاظ أيضًا على عقد API لفئات المواجهة العامة.

  3. NSCFSET هو الفئة الفعلية. يتم تحديد ميزات الحالات من خلال كيفية تخصيصها في المقام الأول. لا توجد طريقة مكشوفة لتحديد ما إذا كانت مجموعتك قابلة للتغيير أو غير قابلة للتغيير. هذا في الواقع عن قصد ؛ يؤدي الذهاب إلى طريق كتابة الكثير من التعليمات البرمجية التي تغير السلوك بناءً على قابلية مجموعة المجموعة إلى الجنون.

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