Метод инициализации по умолчанию objective-c для класса?

У меня есть два разных метода инициализации моего класса objective-c. Один по умолчанию, а второй - параметр конфигурации. Теперь я довольно зеленый, когда дело доходит до objective-c, но я реализовал эти методы, и мне интересно, есть ли лучший (более правильный / в хорошем стиле) способ обработки инициализации, чем тот, который я сделал. . В смысле, написал ли я эти функции инициализации в соответствии со стандартами и в хорошем стиле? Это просто не так Мне кажется правильным проверить наличие selfPtr и затем вернуться на основании этого.

Ниже приведены файлы заголовка и реализации моего класса. Кроме того, если вы заметите что-то еще неправильное или злое, пожалуйста, дайте мне знать. Я разработчик C ++ / Javascript, который изучает Objective-C в качестве хобби и был бы признателен за любые советы, которые вы могли бы предложить.

#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

Спасибо!

7
задан dreamlax 27 December 2010 в 23:49
поделиться