7
votes

Initialisation de l'objet personnalisé dans l'objectif-c

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


0 commentaires

3 Réponses :


2
votes

Vous pouvez conserver 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.

Pour l'initialisation, vous pouvez mettre la ligne de code Belwo deux fois de code dans une méthode distincte. p> xxx pré>

vous permet de disposer de trois méthodes d'initialisation. P>

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


0 commentaires

7
votes

Am utilise Conserver ici correctement? P>

Non, vous n'êtes pas. Vous devez soit utiliser P>

-(id) init
{
    return [self initWithName: @"Some default value"];
}

2 commentaires

Concernant Nstring implémentation nscopying , donc @property (nonatomic, conserver) nstring ... serait faux? Je devrais substituer retenir avec copie? Si oui, alors je ne devrais pas la libérer dans dealloc correct?


@NAYEFC: @Property (copier) Nstring * est correct pour un NSString Propriété ( nonatomic est facultatif bien sûr). Vous devez toujours le relâcher dans dealloc car vous possédez des objets obtenus avec copier .



-2
votes

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


5 commentaires

que initwithinfo: withbar: méthode est vraiment faux. Ça n'appelle pas super et ne retourne rien!


Vous avez défini foo et bar comme chaînes mais utilisez attribuer un nsobject et un nsarray à 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] est également faux. Vous passez les arguments comme initwithinfo: foo withbar: bar . Toutes ces choses sont base 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. " Ceci est pris de Apple Doc et c'est assez visible.