ios - في اشارة الى ضعف الذات داخل كتلة متداخلة




memory-management automatic-ref-counting (2)

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

__weak typeof(self) weakSelf = self;
[self doABlockOperation:^{
    __strong typeof(weakSelf) strongSelf = weakSelf;
    if (strongSelf) {
        ...
    }
}];

لنفترض أنني بالفعل إنشاء الذات ضعيفة باستخدام

__weak typeof(self) weakSelf = self;
[self doABlockOperation:^{
        ...
    }];

داخل تلك الكتلة ، إذا قمت بتعشيق كتلة أخرى:

[weakSelf doAnotherBlockOperation:^{
            [weakSelf doSomething];
}

سوف تنشئ دورة الاحتفاظ؟ هل أحتاج إلى إنشاء مرجع ضعيف آخر للضعيف؟

__weak typeof(self) weakerSelf = weakSelf;
[weakSelf doAnotherBlockOperation:^{
                [weakerSelf doSomething];
    }

هذا يعتمد.

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

في المثال الخاص بك ، ما لم تقم بإجراء المزيد من العمليات التي لا يتم عرضها ، لن تحتاج إلى إنشاء أي برامج ضعيفة.





retain-cycle