سؤال

لقد رأيت هذا الرمز في معظم الوقت. يوجد هنا اسمين متغيران محددان وفي التنفيذ الذي تم تجميعه عن طريق التعيين. ما هو الغرض من فعل شيء مثل هذا؟ مثل الحفاظ على 2 أسماء متغيرة منفصلة. هل هذا النوع من الاتفاقية؟

اختبار

@interface Test {
  id<something> _variable1;
}

@property (nonatomic, retain)  id<something> variable2;

اختبار

@synthesize variable2 = _variable1
هل كانت مفيدة؟

المحلول

هناك متغير واحد فقط. الشيء المسمى variable2 هو في الواقع خاصية ، وهو في الأساس اختصار نحوي لزوج طريقة الحصول على/مجموعة. عند تحديد خاصية ، يمكنك إما كتابة أساليب GET/GET بشكل صريح ...

- (void)setVariable2:(id<something>)value {
    if (_variable1 != value) {
        [_variable1 release];
        _variable1 = [value retain];
    }
}

- (id<something>)variable2 {
    return _variable1;
}

... أو استخدم @synthesize بناء لإنشاء الطرق المذكورة أعلاه تلقائيًا ، وبالتالي تجنب الكثير من الكتابة الرتيبة. (ينبعث أيضًا من الكود لإصدار _variable1 على تدمير الكائن ، الذي لم أقم بتضمينه هنا.)

ومع ذلك ، في بعض الأحيان ، قد ترغب في تنفيذ واحدة أو أخرى من هذه الطرق بشكل مختلف عن الافتراضي. في هذه الحالة ، ستكتب بنفسك. يمكنك حتى الاختلاط معًا @synthesize ونسخة مخصصة من واحدة فقط من الطرق.

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