J'ai créé un objet personnalisé dans l'objectif-c. Maintenant, je veux créer un initialiseur personnalisé. L'objet a deux propriétés, nom et score. Donc, mon initialiseur est la suivante:
- (id)initWithName:(NSString *)playerName { if ((self = [super init])) { self.name = [playerName retain]; self.score = [NSNumber numberWithInt:0]; } return self; }
3 Réponses :
Vous pouvez conserver Pour l'initialisation, vous pouvez mettre la ligne de code Belwo deux fois de code dans une méthode distincte. p> vous permet de disposer de trois méthodes d'initialisation. P> auto-self.name = repaire; code> si vous avez déclaré
nom code> comme propriété conservée dans .h strong> classe et avez aussi
@synthèse code> dans .m strong> fichier.
- (id)initWithName:(NSString *)playerName {
if ((self = [super init])) {
[self initializeWithName:playerName withNumber:0]
}
return self;
}
- (id)initWithNumber:(int*) aNumber {
if ((self = [super init])) {
[self initializeWithName:nil withNumber:aNumber]
}
return self;
}
- (id)init{
if ((self = [super init])) {
[self initializeWithName:nil withNumber:0]
}
return self;
}
Am utilise Conserver ici correctement? P>
Non, vous n'êtes pas. Vous devez soit utiliser P>
-(id) init { return [self initWithName: @"Some default value"]; }
Concernant Nstring code> implémentation
nscopying code>, donc
@property (nonatomic, conserver) nstring ... code> serait faux? Je devrais substituer retenir avec copie? Si oui, alors je ne devrais pas la libérer dans
dealloc code> correct?
@NAYEFC: @Property (copier) Nstring * code> est correct pour un
NSString code> Propriété (
nonatomic code> est facultatif bien sûr). Vous devez toujours le relâcher dans
dealloc code> car vous possédez des objets obtenus avec
copier code>.
Pour ce qui vaut la peine d'être au reste de nous débutants:
Dans les langues normales, peut simplement définir des arguments lors de l'instanciation de la classe: P>
MakeBed myBedMaker = [[MakeBed alloc] initWithInfo:*foo withBar:*bar];
que initwithinfo: withbar: code> méthode est vraiment faux. Ça n'appelle pas super et ne retourne rien!
Vous avez défini foo code> et
bar code> comme chaînes mais utilisez attribuer un
nsobject code> et un
nsarray code> à eux. (Également une mauvaise pratique à utiliser conserver / forte pour les classes qui ont des sous-classes mutables (comme des chaînes et des tableaux par exemple)))
[[[FOKED ALLOC] Initiplanfo: * FOO withbar: * bar] code> est également faux. Vous passez les arguments comme
initwithinfo: foo withbar: bar code>. Toutes ces choses sont base i> objectif-c.
-1. Certains concepts de base de la langue me manquent vraiment de faire une analyse comparative avec quoi que ce soit.
Au fait, lorsque vous abordez une langue, vous devez d'abord sa construction de base. " Sauf si vous spécifiez le contraire, la variable d'instance synthétisée a le même nom que la propriété, mais avec un préfixe de soulignement. Pour une propriété appelée FirstName, par exemple, la variable d'instance synthétisée sera appelée _firstName. i>" Ceci est pris de Apple Doc et c'est assez visible.