'daki ivar bloğunda __block öz referans döngüsü Bir blok ivarda görünür bir referans döngüsüne sahip bir kodum var. Aşağıdaki kod, bir referans döngüsü neden olur ve dealloc asla denir:ARC
__block MyViewController *blockSelf = self;
loggedInCallback = ^(BOOL success, NSError *error){
if (success)
{
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
{
[blockSelf.delegate loginDidFinish];
});
}
};
Ancak, yakalama için bloğun kapsam için benim temsilci başvuru tutmak için başka __block
değişken oluşturmak eğer referans döngüsü uzağa gider:
__block id <MyViewControllerDelegate> blockDelegate = self.delegate;
loggedInCallback = ^(BOOL success, NSError *error){
if (success)
{
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
{
[blockDelegate loginDidFinish];
});
}
};
Sadece burada neler olduğunu anlamak istiyorum.
Mükemmel, teşekkürler! Sorumluluğun daha açıklayıcı olması için başlığımı güncelledim. –
iOS 4.3'ü hedefliyorum, bunun yerine '' __unsafe_unretained'' kullanmak zorunda kaldım, ama işe yarıyor! –