Question

Je le développement de jeux iPad. Je rencontre cette chose. Ceci est mon exemple de code:

Méthode 1:

Foo.h

@interface Foo : UIView{
    UILabel *title;
    .... // Other objects like UISlider, UIbuttons, etc.
}

// I add @property for all the objects.
@property (nonatomic, retain) UILabel *title;

... blablabla

Foo.m
// I synthesize all the properties.
@synthesize title;
... blablabla

// Release in dealloc method
[title release];
....
[super dealloc];

Méthode 2:

Foo.h

@interface Foo : UIView{
    UILabel *title;
    .... // Others object like UISlider, UIbuttons, etc.
}
// But this time I didn't add @property, synthesize and release.

Foo.m
// When I need the label, I allocate it:
title = [[UILabel alloc] initWithRect: CGRect(10, 10, 100, 30)];
title.text = @"test";
[self addSubview: title];
[title release];

Les deux méthode 1 et 2 travail, mais quelle est la différence entre les 2 méthodes (method2 a moins de code)?

Quelle méthode dois-je utiliser et pourquoi?

a-t-il quelque chose à voir avec la gestion de la mémoire?

Était-ce utile?

La solution

Méthode 2 est techniquement incorrect car en envoyant -release à titre vous indiquez que vous n'êtes plus intéressé à elle. Vous devriez en faire nul juste après, ou mieux encore, en faire une variable locale.

Méthode 1 est tout à fait bien et a l'avantage que, en dehors de -dealloc-vous d'utiliser toujours la propriété de se référer à elle, vous n'avez pas besoin de vous soucier de faire -retain et -release -droit.

Autres conseils

La différence est que, dans la méthode 2, vous ne serez pas avoir accès au titre de l'extérieur de l'objet Foo. variable d'instance sont privés à la classe.

En outre, vous devez vous assurer que vous équilibrer le alloc / conserver et libère.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top