لماذا ليست هناك حاجة للإفراج عن متنفس تم إعداده مع "تعيين"؟

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

سؤال

ولقد كنت أقرأ أنه إذا كان لدي شيء من هذا القبيل:

@property (nonatomic, assign) UIView *anView;

وبعد ذلك ليس لدي أن نهتم إدارة الذاكرة. ليس لدي للقيام [إطلاق anView] في طريقة -dealloc.

لماذا؟

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

@synchronize anView;

ومترجم يخلق سحرية جالبة واضعة، حيث واضع قد تبدو تماما مثل ما يلي:

- (UIView*) anView {
    return anView;
}

واضعة قد تبدو مثل:

- (void) setAnView:(UIView*)newAnView {
    anView = newAnView;
}

والحق / خطأ؟ إذا كان هذا هو الحق، واضعة تدعي أي ملكية متغير newAnView، لأنها ليست "الاحتفاظ" الملكية. والامر لا يتطلب ذلك ويسند الى متغير مثيل. لذلك عند النظر في سياسة الملكية، ليست هناك حاجة للإفراج عن المثال متغير anView في -dealloc. الكائن لا تملك ذلك. المحكمة الخاصة العراقية هذا صحيح؟

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

المحلول

نعم، كنت الصحيح أساسا. دعونا نفترض أن جمع القمامة هو خارج (وإلا فإنه لا يهم على أي حال).

عند استخدام خصائص 'تعيين'، لم يكن لديك لتحرير الكائن لأنك لا الاحتفاظ بها (عليه المسؤولية لشخص آخر).

وأساسا، وهذا يخلق إشارة ضعيفة - anView قد يمكن deallocated في حين أن الملكية لا يزال يشير في ذلك. عادة، وكنت استخدام 'تعيين' لأنواع البيانات البدائية، وليس للكائنات.

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