2013-05-11 13 views
6

Neden ARC düzenli bir sürüm kullanmıyor?ARC neden zayıf referansları kullanırken otomatikleştiriyor?

Örnek:

Anladığım kadarıyla
[weakObject doSomething]; 

, ARC bu dönüşür:

Object *strongObject = objc_autorelease(objc_loadWeakRetained(weakObject)); 
[strongObject doSomething]; 

Neden ARC yerine bu yapmaz ?:

Object *strongObject = objc_loadWeakRetained(weakObject); 
[strongObject doSomething]; 
objc_release(strongObject); 

ben istiyorum ARC'de mümkün olduğunca çok sayıda otorite ile uzaklaşmak ister. Ben doğru oluşturulan derleme kodu anlarsanız ARC derleyici bu şekilde neden yaptığını

dispatch_async(self.myQueue, ^{ 
    @autoreleasepool{ 
     [weakObject doSomethingBig]; 
    } 
}); 
+1

Temel olarak, yeterince akıllı bir derleyici eksikliği. Muhtemelen dosyalanmış ve kesinlikle bilinmesine rağmen, hata raporuna değer olabilir. –

+0

ZayıfObject nereden geliyor? –

cevap

2

ben açıklayamam, ama : Ben OBEB ile zaman uyumsuz iş parçacığı bir sürü yapmak ve sallanmasını havuzlar bir sürü eklemek zorunda sonunda aşağıdaki deseni

dispatch_async(self.myQueue, ^{ 
    Object *strongObject = weakObject; 
    [strongObject doSomething]; 
}); 

kullanılarak çevrilir objc_loadWeakRetained(), ..., objc_release(), nesne otomatik salma havuza koymak değil böylece.