objective-c - ماهي - swift




متغير فئة المعرفة فيimplementation بدلا منinterface؟ (4)

إذا قمت بتعريف متغير داخل قسم تطبيق @ ، فأنت تقوم بالفعل بإنشاء متغير عمومي ، مرئي في كل مكان (في كل طريقة في التطبيق الخاص بك).

لا يمكن التصريح عن متغيرات الأعضاء إلا في قسم الواجهة. يمكن الوصول إليها فقط في الفصل نفسه.

أنا جديد على الهدف- C ، لكنني أشعر بالفضول حيال شيء لم أره يعالجه في أي مكان آخر.

هل يمكن لأي أحد أن يخبرني ما هو الفرق بين متغير خاص يتم الإعلان عنه في كتلة @interface مقابل متغير يتم الإعلان عنه ضمن كتلة تنفيذ @implementation خارج أساليب الفصل ، أي:

@interface Someclass : NSObject {

 NSString *forExample;

}

@end

ضد.

@implementation Someclass

 NSString *anotherExample;

-(void)methodsAndSuch {}

@end

يبدو أنه يمكن الوصول إلى المتغيرات ( forExample ، anotherExample ) بشكل متساوٍ خلال الفصل الدراسي ولا يمكنني حقًا العثور على اختلاف في سلوكهم. هل يسمى النموذج الثاني أيضًا متغير مثيل؟


استخدم مقتطف شفرة لمعرفة الفرق بين متغير عضو ومتغير عام:

@implementation MyClass {
  // It is an ivar, or called member variable
  // Can NOT be initialized when defined.
  // Can be accessed with `self->_i`
  int _i; 
}

- (instancetype)init {
    if (self = [super init]) {
       _i = 2; // should be initialized before being used.
    }
    return self;
}

int i = 9; // Global variable, and can be initialized when defined.
- (void)myFun {
    NSLog(@"%i, %i", self->_i, i);
}

@end


// Another file

extern int i;
NSLog(@"%i", i);

لكي تكون واضحًا ، لا تعلن أبدًا عن إصدار IBOutlet باعتباره متغيرًا عالميًا (في التنفيذ) إذا كنت تستخدمه في حبيبات / xibs مترجمة.

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

شكرا على هذا السؤال والإجابات!


هذا الأخير لا يحدد متغير مثيل. بدلاً من ذلك ، يتم تعريف متغير عمومي في ملف .m. مثل هذا المتغير ليس فريدًا أو جزءًا من أي مثيل كائن.

تستخدم مثل هذه الكرات الشاملة (مثل أعضاء C ++ المكافئين تقريبًا ؛ على سبيل المثال تخزين مثيل مفرد) ، ولكن عادةً ما ستقوم بتعريفهم في أعلى الملف قبل توجيهimplementation.





objective-c