İki tanım aynı değil mi?
Kesinlikle hayır. Belirttiğiniz iki tanımdaki temel fark, "başkası olduğu sürece" dir. Önemli olan "başka biri" dir.
Aşağıdakileri göz önünde bulundur:
__strong id strongObject = <some_object>;
__weak id weakObject = strongObject;
Şimdi iki işaretimiz var <some_object>, biri güçlü, diğeri zayıf. Biz ayarlarsanız strongObjectiçin nilöylesine gibi:
strongObject = nil;
Ardından, özetlediğiniz kuralları uygularsanız, kendinize şu soruları soracaksınız:
Güçlü: "artık işaret etmeyene kadar bunu yığında tut"
strongObjectartık işaret etmiyor <some_object>. Yani onu tutmamıza gerek yok.
Zayıf: "Başkası güçlü bir şekilde işaret ettiği sürece bunu saklayın"
weakObjecthala işaret ediyor <some_object>. Ama kimse bu yana başka buna noktaları, bu kural da bunu tutmak gerek olmadığı anlamına gelir.
Sonuç, <some_object>atamanın kaldırılması ve çalışma zamanınız destekliyorsa (Lion ve iOS 5 üstü) weakObjectotomatik olarak şu şekilde ayarlanacaktır:nil .
Şimdi set ne olur düşünün weakObjectiçin nilöylesine gibi:
weakObject = nil;
Ardından, özetlediğiniz kuralları uygularsanız, kendinize şu soruları soracaksınız:
Güçlü: "artık işaret etmeyene kadar bunu yığında tut"
strongObjectişaret ediyor <some_object>. Yani onu korumamız gerekiyor.
Zayıf: "Başkası güçlü bir şekilde işaret ettiği sürece bunu saklayın"
weakObjectişaret etmiyor <some_object>.
Sonuç olmasıdır <some_object>edilir değil ayırmanın, ancak weakObjectolacak nilişaretçi.
[Tüm varsayımların <some_object>, başka bir yerde başka bir güçlü referansla / "tutulmanın" başka yollarıyla gösterilmediğine dikkat edin]