Domanda

(Stiamo parlando di codice all'interno di sottoclassi personalizzate UIViewController - E comunque non uso IB) Ok, quindi ho impostato il membro self.view in - void) loadView, e poi creo i miei controlli e visualizzazioni e quant'altro in - (void) viewDidLoad, quindi aggiungerli alla sottoview. Se il controllo non è un membro, se lo creo e lo rilascio localmente nel metodo, ecco come lo faccio: (Con un 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];
}

Questo è solo un esempio di come vorrei creare un'etichetta localmente, impostarne le proprietà, aggiungere alla sottoview e rilasciare. Ma con un membro, faccio questo:

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];
}

Ma l'ho anche visto fatto

...
- (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];
}

così nel mio sviluppo iniziale di iPhone 3: esplorare il libro sdk. Notare l'aggiunta della variabile locale, quindi il rilascio. Cosa dovrei fare? Importa per niente?

È stato utile?

Soluzione

Se lblMessage è una proprietà di mantenimento (che è spesso vera), allora non ci sono differenze funzionali. Altrimenti, release-before-addSubview è un bug, poiché tenterà di aggiungere un oggetto deallocato come sottoview.

Ecco una breve panoramica del conteggio dei riferimenti su localMessage , supponendo che la proprietà lblMessage mantenga:

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.

Desideri che .Vedere .

Altri suggerimenti

L'etichetta che è un membro e l'etichetta dell'ambito locale sono riferimenti reciproci, quindi sono lo stesso oggetto, quindi non importa in che modo lo fai, semplicemente non avrei il locale e inizializzerei direttamente l'etichetta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top