2016-03-24 17 views
1

Bir sınıfın bir kod parçası olduğunu buldum ve bu sınıf CustomViewController (UIViewController'ı devraldı) özelliğini hesapladı ve bu özelliğin alıcısında kendini depoladılar. O viewcontroller bu hiç de-inited edilecektir sunmak bu tarif etmek sıcak iyi yolu kodu ŞimdiHesaplanmış özelliklerdeki devri yerinde tutuyor mu?

class SomeClass: { 

    var alertViewController: UIViewController? { 
     if self.wasRequested { 
      return self.chatController 
     } else { 
      let vc = CutomVC(nibName: "SomeNibName", bundle: nil) 
      vc.alert = self 
      return vc 
     } 
    } 
} 

yoluyla mı? Bu korunma döngüsü mü?

kuvvetle başka yerde başvurulan değil varsayarak

+0

bu yöntemin sonucunu kendiliğinden saklamıyor mu? aka, bu hesaplanan CustomVC'ye bir referans var mı, eğer bir koruma döngüsü olacağını düşünmüyorsa neden olur. ama muhtemelen – Fonix

+0

'vc.alert' değilse güçlü bir başvuru olarak kalması gerekir 'vc.alert' zayıf bir başvuru yapmak için zarar olmaz. Bu yöntemin sonucu başka bir denetleyicide sunulduysa, vc.alert, kendiliğinden hiçbir yerde güçlü bir şekilde tutulmadığında sıfır olacaktır; bu, vc'nin kullanılmasından önce olabilir. Bu her şey garip bir tasarım deseni gibi görünüyor. –

+0

Evet gerçekten garip :), ama ne olacağını merak ettim..Sağolduğumuzu düşünün – beretis

cevap

0

Selfvc değişken ayırmanın her ayırmanın edilecektir teşekkür ederiz. Bu bir döngü döngüsü değildir, çünkü self, vc'a güçlü bir şekilde başvurmamaktadır.

Ancak self halinde selfvc için güçlü bir referansa sahip olacaktır (sunma veya başka şekilde) bir alt görünüşüdür-kontrolör olarak vc ilave edildi. Bu, teknik olarak bir tutma döngüsüdür, ancak bu konu ilgisizdir, çünkü self ana görüntüleme kontrolöründen self çıkarıldığı zaman, tüm referansları kendi çocuk görüntü denetleyicilerine kaldırır. Bu, self ve vc arasındaki tutma döngüsünü bozar.

+0

Örnekler: Kitaplar (başlık, yazar, resim), collectionView veri kaynağı [Alerts] karınca bir dizi olurdu CollectionView denetleyicisi düşünün Bu sınıf Uyarısı didSelect üzerinde sunulacak bu hesaplanmış özellik alertViewController olurdu. Olup biten bu ... o bilgisayarlı navigasyon navigasyonda, sonra da kafam karışmış ve meraklı. – beretis

+0

Bu uyarı dizisi, her bir uyarının tutulduğu aynı görünüm denetleyicisi tarafından korunursa, bir tutma döngüsü olur. Bu, her bir görüntü denetleyicisi süper görüntü denetleyicisinden kaldırılmış olsa bile bir koruma döngüsüne neden olur. Çünkü Uyarı dizisi ayrıştırılmayacaktır. –

+0

Sh * t [Kitap] öğesinin listesini gözden geçirir .... karışıklık için üzgünüm – beretis

İlgili konular