2010-12-09 8 views
0

Wenn ich zur Laufzeit ein UIControl erstelle und es zu einer Ansicht hinzufüge (über addSubview :), wird die Ansicht es freigeben oder soll ich das machen?Wird eine UIView ihre Subviews in Cocoa Touch freigeben?

Hier ist ein Beispielcode:

-(IBAction) cloneMe: (id) sender{ 

    if (!currentY) { 
     currentY = [sender frame].origin.y; 
    } 

    UIButton *clone = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    CGRect cloneFrame = [sender frame]; 
    cloneFrame.origin.y += currentY + cloneFrame.size.height + 30; 
    clone.frame = cloneFrame; 
    [clone setTitle:@"I'm a clone" forState:UIControlStateNormal]; 

    [[sender superview] addSubview:clone]; 

    currentY = cloneFrame.origin.y + cloneFrame.size.height; 


} 
+0

Können Sie ein kurzes Beispiel für den Code geben, den Sie haben? – DerekH

+0

Siehe Beispielcode über – cfischer

Antwort

7

[UIButton buttonWithType:UIButtonTypeRoundedRect] gibt Ihnen ein bereits automatisch freigegebenes Objekt. Das bedeutet, dass Sie das Objekt nicht "besitzen" und Sie daher nicht die Verantwortung haben, es freizugeben.

Wenn Sie es beibehalten würden, würden Sie ausdrücklich sagen, dass Sie dieses Objekt für sich behalten möchten, was bedeutet, dass Sie die Verantwortung übernehmen würden, es freizugeben.

Die UIView behält ihre Unteransichten, so ist es die UIView Verantwortung, sie zu veröffentlichen. Die UIView wird ihre Subviews freigeben, wenn sie selbst freigegeben wird oder wenn die Subviews aus der Superview entfernt werden.

Grundsätzlich, wenn Sie nicht alloc/init tun, new, copy oder retain ein Objekt ist, dann ist es nicht Ihre Aufgabe, und Sie sind nicht verantwortlich für die Freigabe. Sie müssen sich nicht darum kümmern, welches Objekt auch immer das Objekt besitzt (in Ihrem Fall wird die UIView) es freigeben, wenn es damit fertig ist.

1

Wenn Sie der Empfänger addSubview: das Argument behält, und gibt es, wenn Sie es über eine der Methoden entfernen, das tut.

+0

Ich sollte es also automatisch freigeben, denke ich. – cfischer

+1

Sie sollten die Speicherverwaltungsregeln befolgen. – jer

+0

rtfm, im Grunde genommen –

Verwandte Themen