Frage

(Wir reden über Code in benutzerdefinierten UIViewController Subklassen - Und übrigens ich IB nicht) Ok, so habe ich das self.view Mitglied in - (void) Loadview und dann erstelle ich meine Kontrollen und Ansichten und was auch immer in - (void) viewDidLoad, und sie dann an den Subview hinzuzufügen. Wenn die Steuerung nicht Mitglied ist, wenn ich es schaffen und lassen Sie sie lokal in dem Verfahren, das ist, wie ich es tun: (Mit einem UILabel)

- (void)viewDidLoad {
    UILabel *localLabel = [[UILabel alloc] initWithFrame:CGRectMake(81, 384, 148, 21)];
    localLabel.text = @"I'm a Label!";
    localLabel.AutoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                  UIViewAutoresizingFlexibleRightMargin |
                                  UIViewAutoresizingFlexibleBottomMargin);

    [self.view addSubview:localLabel];
    [localLabel release];
    [super viewDidLoad];
}

Das ist nur ein Beispiel dafür, wie ich ein Etikett vor Ort schaffen würde, legen Sie seine Eigenschaften, in dem SubView und Release. Aber mit einem Mitglied, das tue ich dies:

UILabel *lblMessage;
...
@property (nonatomic, retain)UILabel *lblMessage;
...
- (void)viewDidLoad {
    UILabel *localMessage = [[UILabel alloc] initWithFrame:CGRectMake(81, 384, 148, 21)];
    localMessage.text = @"I'm a Label!";
    localMessage.AutoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                      UIViewAutoresizingFlexibleRightMargin |
                                      UIViewAutoresizingFlexibleBottomMargin);
    self.lblMessage = localMessage;
    [localMessage release];

    [self.view addSubview:lblMessage];
    [super viewDidLoad];
}

Aber ich habe es auch getan gesehen

...
- (void)viewDidLoad {
   UILabel *localMessage = [[UILabel alloc] initWithFrame:CGRectMake(81, 384, 148, 21)];
    localMessage.text = @"I'm a Label!";
    localMessage.AutoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                      UIViewAutoresizingFlexibleRightMargin |
                                      UIViewAutoresizingFlexibleBottomMargin);
    self.lblMessage = localMessage;

    [self.view addSubview:localMessage];
    [localMessage release];
    [super viewDidLoad];
}

wie das in meinem Anfang iPhone 3 Entwicklung: die Erkundung der sdk Buch. Hinweis Hinzufügen der lokalen Variablen, dann loslassen. Welche soll ich tun? Ist es wichtig, überhaupt?

War es hilfreich?

Lösung

Wenn lblMessage eine Halteeigenschaft ist (was oft der Fall ist), dann gibt es keinen funktionalen Unterschied. Andernfalls wird die Release-vor-addSubview ist ein Fehler, da es ein freigegebenes Objekt als ein Subview hinzufügen wird versuchen.

Hier ist ein kurzer Durchmarsch der Referenz auf localMessage zählen, vorausgesetzt, die Eigenschaft lblMessage wird beibehalten:

UILabel *localMessage = [[UILabel alloc]...  // retainCount is now 1
// Set up localMessage.  If you release'd now, you'd dealloc the object.
self.lblMessage = localMessage;  // retainCount is now 2
// You can safely call release now if you'd like.
[self.view addSubview:localMessage];  // retainCount is now 3.
[localMessage release];  // retainCount is now 2.

Sie möchten die retainCount bei 2 zu beenden, da Sie effektiv 2 Verweise auf dieses Objekt haben -. Ihr Mitglied Zeiger lblMessage, und einem anderen Halte Zeiger in self.view

Andere Tipps

Das Label, das ein Mitglied und das lokale Bereich Label ist sind Verweise auf sie, so dass sie das gleiche Objekt sind, so spielt es keine Rolle, welche Art und Weise u es tut, würde ich einfach nicht die lokal hat und das Label direkt initialisieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top