سؤال

لدي فصل يحمل كتلة كخاصية كائن:

giveacodicetagpre.

حيث sffailureblock:

giveacodicetagpre.

لدي عملية أعلنت أيضا كملكية كائن (AfhttpreceStroperation) وأريدها أن استدعاء كتلة الفشل بمجرد اكتمالها.

giveacodicetagpre.

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

شيء غريب آخر هو أنه إذا كتبت "Self.FailureBlock (خطأ)" التحويل البرمجي لا يعطيني أي تحذير!

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

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

المحلول

عندما تشير إلى "فشل" في كتلة العملية، فأنت تقوم بعمل "فشل" الذاتي> "- لذلك يحتفظ ضمنيا بالذات.ما يمكنك القيام به هو إنشاء SFFAILULEBLOCK متغير التلقائي XfailureBlock= فشل؛فوق السفلية، ثم استخدمه في الكتلة.[مرة أخرى، تريد تجنب أي مراجع ذاتية> داخل هذه الكتلة إما.]

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