Entfernen Aussicht aus dem SuperView, wobei die Untersichten auf dem iPhone
Welches Ereignis wird ausgelöst, wenn eine Ansicht ist, die entfernt von seinem super-Blick? Seine sub-Ansichten erhalten keine Nachricht?
Ich habe zum Beispiel subview2 und subview3 Hinzugefügt subview1 wie in
super_view -> subview1 -> subview2 -> subview3
wenn ich entfernen subview1 z.B. durch
[subview1 removeFromSuperview];
Welches Ereignis seine subviews(subview2 und subview3) erhalten?
Gibt es eine Möglichkeit zu lassen, Untersichten wissen, dass Ihre super Ansicht entfernt wird?
InformationsquelleAutor MAbbas | 2009-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt es von der retain-count von subview2 und subview3. Wenn Sie Sie erstellen über [[UIView alloc] initWithFrame:frame], und fügen Sie dann, wie Untersichten, haben Sie eine retain-count von 2. (Oder 3, wenn Sie eine Referenz in einer beibehaltenen Eigenschaft, d.h. sich selbst.subview2 = [[...
Also, wenn Sie wollen, dass Sie freigegeben werden, wenn subview1 veröffentlicht wird, dann stellen Sie sicher, geben Sie Ihnen eine andere Version, nach hinzufügen als eine Untersicht, so dass Ihre retain-count ist nur ein einziges aus, die Hinzugefügt wird, als eine Untersicht. So etwas wie dieses...
Auch Jane, Wie Sie bereits erwähnt, ich bin loslassen der Untersicht nach dem hinzufügen zu einem super Ausblick. Aber wenn ich entfernen Sie die super-Sicht sagen "subview1" durch [self removeFromSuperView]; // Entfernen subview1 von seinem superview dealloc für subview2 ist nicht genannt. Die Dokumentation "removeFromSuperView" erwähnt, dass callin es release wird es auch. Bin ich etwas fehlt? Danke,
Sie müssen eine zusätzliche behalten auf subview2 - ohne zu sehen, den code, kann ich nur sagen, sorry. Und ein up vote für mein Leben? Ich mag es, aber ich bin mir sicher, dass ich zurückkehren sollte, der Punkt oder sowas 🙂
InformationsquelleAutor Jane Sales
Da diese Frage noch offen ist, hier eine Antwort:
Wenn Sie müssen, im Gegenteil, hier ist, wie die superview ist mitgeteilt, dass Ihre Untersicht ist peacing.
Welches Ereignis seine subviews(subview2 und subview3) erhalten?
subview1
ist bekannt, abersubview2
undsubview3
haben müsste, dass die Nachricht weitergegebensubview1
(was nicht automatisch erfolgt).Gibt es eine Möglichkeit zu lassen, Untersichten wissen, dass Ihre super Ansicht entfernt wird?
Sie könnten einen einfachen delegate-Protokoll, oder Sie verlängern könnte
UIView
für diesen Zweck.Halten Sie im Verstand, jedoch, dass, wenn Sie wirklich wollen, um zu wissen, wenn Sie nicht mehr auf den Bildschirm (und die Tatsache, dass Sie nicht über ein superview ist zweitrangig, um Ihr Ziel), alle Untersichten werden benachrichtigt, durch die
UIWindow
Spiegel der oben genannten Methoden.InformationsquelleAutor Ian MacDonald
Ich glaube nicht, dass Untersichten(2,3) erhalten jedem Fall, wenn subview1 entfernt, per se (zumindest wird nichts erwähnt in der Dokumentation).
BEARBEITEN:
Nachdenken über es mehr ... ich glaube, dass die Untersichten(2,3) nicht empfangen werden-Ereignis per se, wenn die subview1 freigegeben wird.
Aber als Nebenwirkung subview1 immer freigegeben, wenn subview1 nicht beibehalten woanders seine ref-count den Wert 0 erreichen, und es wird freigegeben. Während die Freigabe subview1 release wird alle seine subviews.
In diesem Fall werden Sie veröffentlicht wird, ich bin mir nicht sicher, ob dies ist, was Sie sind nach.
Siehe Jane ' s Antwort.
InformationsquelleAutor stefanB
wenn eine Ansicht entfernt von seinem superview, alle untergeordneten Ansicht wird auch von ihm entfernt mit dem Ergebnis der Reduzierung von retaincout.
Blick auf das folgende codestück:
Und die Konsole ist so:
eigentlich bei der letzten NSLog die app zum Absturz bringen, da beide der objets hat retainCount =0.
Hoffe, das hilft.
InformationsquelleAutor Shaikh Sonny Aman