2016-09-21 4 views
-2

"Ein häufiger Anwendungsfall für das schwache Attribut ist Eltern-Kind-Datenstrukturen. Nach Konvention sollte das Elternobjekt eine starke Referenz mit seinen Kindern beibehalten, und die Kinder sollten eine schwache Referenz speichern zurück zum Elternteil. Schwache Referenzen sind auch ein fester Bestandteil des Designmusters der Delegierten. "Behalten Zyklus: "Parent-Child"

Frage:

1) Warum die Kinder kann Speicher ein schwacher Verweis zurück auf die Eltern? Was ist, wenn ihre Eltern "verschwinden"?

2) Was bezieht sich hier auf das Delegiertenentwurfsmuster? Was hat es mit schwachen Referenzen zu tun?

+0

Viele Duplikate wie http://stackoverflow.com/questions/8449040/why-use-weak-pointer-for-delegation und http://stackoverflow.com/questions/14249395/reference-a-views-eltern-ohne-bekommen-einen-kreis-import – ozgur

+0

@ozgur Ich glaube nicht, dass du meine Frage gut verstehst? Ich frage, warum es "kann" nicht "sollte". Ich kenne den Rückhaltezyklus. –

+1

Ich denke, die "Dose" hängt mit dem zusammen, was dem Kind passieren soll, wenn die Elternfreigabe aufgehoben wird. Solange Sie froh sind, dass die Kinder ebenfalls freigestellt werden (in Ermangelung eines anderen starken Bezuges auf das Kind), können Sie eine schwache Referenz verwenden. Gleiches gilt für einen Delegierten. Es ist oft einfacher, einen schwachen Verweis auf den Delegaten zu verwenden, sodass das Delegatobjekt sich nicht explizit als Delegat eines Objekts entfernen muss, um sich selbst zu entziehen. – Paulw11

Antwort

1

Für Frage 1, wenn der Elternteil freigegeben wird, wird die schwache Referenz in einem Kind eine Referenz auf ein nicht zugeordnetes Objekt, und die Verwendung wird eine Ausnahme verursachen.

Der Weg, diesen Umstand zu vermeiden, besteht darin, die Verantwortung der Eltern zu übernehmen, ihre Kinder nach der Freigabe freizugeben. Das Kind wird niemals einen schwachen Bezug zu einem freigegebenen Elternteil haben, da dieses Kind freigegeben worden wäre, wenn das Elternteil es gewesen wäre.

Zu Frage 2, here's a good reference for the delegate pattern.