objective-c par défaut de la méthode init de la classe?

J'ai deux différentes méthodes pour initialiser mon objectif c de classe. L'une est la valeur par défaut, et l'on prend un paramètre de configuration. Maintenant, je suis assez vert quand il s'agit de objective-c, mais j'ai mis en œuvre ces méthodes et je me demandais si il y a une meilleure (plus correct/bon style) pour gérer l'initialisation de la façon dont je l'ai fait. Sens, ai-je écrire ces initialisation des fonctions en conformité avec les normes et bon style? Il n'a tout simplement pas se sentir le droit de vérifier l'existence de selfPtr et revenir ensuite sur cette base.

Ci-dessous sont les élèves de ma classe d'en-tête et les fichiers de mise en œuvre. Aussi, si vous repérez quelque chose d'autre qui est le bien et le mal, s'il vous plaît laissez-moi savoir. Je suis une C++/développeur Javascript qui est d'apprendre objective-c comme passe-temps et apprécie les conseils que vous pourriez offrir.

#import <Cocoa/Cocoa.h>

//class for raising events and parsing returned directives

@interface awesome : NSObject {
 //silence is golden. Actually properties are golden. Hence this emptiness.
}

//properties
@property (retain) SBJsonParser* parser;
@property (retain) NSString* eventDomain;
@property (retain) NSString* appid

//constructors
-(id) init;
-(id) initWithAppId:(id) input;

//destructor
-(void) dealloc;


@end

#import "awesome.h"
#import "JSON.h"


@implementation awesome



- (id) init {
 if (self = [super init]) {
  //if init is called directly, just pass nil to AppId contructor variant
  id selfPtr = [self initWithAppId:nil];
 }

 if (selfPtr) {
  return selfPtr;
 } else {
  return self;
 }
}

- (id) initWithAppId:(id) input {
 if (self = [super init]) {
  if (input = nil) {
   input = [[NSString alloc] initWithString:@"a369x123"];
  }
  [self setAppid:input];
  [self setEventDomain:[[NSString alloc] initWithString:@"desktop"]];
 }
 return self;
}

//property synthesis
@synthesize parser;
@synthesize appid;
@synthesize eventDomain;

//destructor
- (void) dealloc {
 self.parser = nil;
 self.appid = nil;
 self.eventDomain = nil;
 [super dealloc];
}

@end

Merci!

Un des problème particulier que je vois, c'est que si init est utilisé, alors [super init] est appelée deux fois.
Vous êtes également les fuites de la eventDomain bien, parce que vous créez un objet à +1 propriété comte, et le donner à une méthode qui augmente la propriété count +2, votre méthode dealloc seulement le ramène vers +1. Il devrait être 0 par rapport à votre awesome objet.
Aussi, le Cocoa/Cocoa.h est pour Mac OS X, pas pour iOS.
Aussi, le Cacao utilise traditionnellement capital chameau cas (ou le haut du dos de chameau cas) pour les noms de classe, comme Awesome ou MoreAwesome, ou TheMostAwesome etc.
Attendez, qui a ajouté le ios tag? Il n'y avait rien dans cette question de suggérer ce fut ios, en fait, comme @jer points, inclus l'en-tête indique que c'est Mac OS X, pas iOS.

OriginalL'auteur Alex | 2010-12-27