لماذا تستخدم الخاصية المعلنة كلا من الاحتفاظ والقراءة فقط؟

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

سؤال

لقد لاحظت أن بعض أمثلة Apple تتضمن كلاً من أ retain و readonly المعدل على الخصائص.ما الفائدة من تضمينها retain إذا لم يتم إنشاء أداة ضبط عندما نستخدم ملف readonly المعدل؟

مثال: @property (retain, readonly) NSString *title; من نموذج AnimatedTableView.

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

المحلول

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

نصائح أخرى

أو بشكل أكثر تحديدًا، (للقراءة فقط، الاحتفاظ) يمكّن نمطًا مثل هذا:

فو.ح:

@interface StuffHolder:NSObject
@property(readonly, retain) MyStuff *stuff;
@end

فو.م:

@interface StuffHolder()
@property(readwrite, retain) MyStuff *stuff;
@end

@implementation StuffHolder
@synthesize stuff;
@end

والنتيجة النهائية هي خاصية يمكن قراءتها بشكل علني فقط أثناء إعادة كتابتها داخل التطبيق والتي يتم تجميع كل من setter و getter لها تلقائيًا بواسطة المترجم.

تحذير استطاع يتم إنشاؤها في حالة عدم وجود تجاوز (القراءة والكتابة والاحتفاظ) في ملحق الفصل - وهو شيء مشابه لـ statement without an effect - ولكن سيكون الأمر مربكًا أكثر من كونه مفيدًا.هناك أيضًا عدد كبير من حالات الحافة المختلفة عبر المجموعات التي من شأنها أن تستدعي تحذيرًا متساويًا، ولكنها لا تشير حقًا إلى مشكلة فعلية.تم اتخاذ القرار بقبول الأنماط المختلفة إلى حد كبير دون شكوى من أجل البساطة (نظرًا لأنها ليست مشكلات تتعلق بالصحة).

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