2012-03-24 31 views
7

Oldukça basit bir soru:Obj-C: NSError Başlatıcı içinde

ben yanlış potansiyeline sahiptir Dersimde bir init yöntemi var. Eğer yaparsa, "geri dönüşü" yapmayı planlıyorum, ama aynı zamanda bir hata döndürmek istiyorum. Bir init yöntemine bir NSError ** parametresi olması kötü bir uygulama mıdır? Benim yöntemim beyanı şu şekilde görünecektir:

- (id) initWithArgs:(NSString*) args andError:(NSError**)error; 

çok teşekkür ederiz, Nick

cevap

7

olağan değildir ama mutlaka kötü bir uygulama olduğunu sanmıyorum. Yine de, yöntemin ikinci bölümünü "andError:" yerine "error" olarak adlandırırdım. Bir yöntem adının kısımlarını 've' ile bağlamanız gerekmez ve bu durumda, aynı zamanda, hatanın nesneyi başlatmak için kullanılmakta olduğu izlenimini verir. Sadece bunu yapmak: Ayrıca

- (id) initWithArgs:(NSString*) args error:(NSError**)error; 

, tahsis nesneyi serbest bırakmak için unutma sen (nil gibi) başka bir şey dönmek planlıyorsanız: Ben öneriyoruz

- (id) initWithArgs:(NSString*) args error:(NSError**)error 
{ 
    if ((self = [super init])) { 
     if (canInitThisObject) { 
      // init this object 
     } 
     else { 
      [self release]; 
      self = nil; 
      if (error != nil) { 
       *error = [NSError errorWithDomain:someDomain code:someCode: userInfo:nil]; 
      } 
     } 
    } 
    return self; 
} 
+1

bir şey DAİMA hatayı ayarlıyor Yöntemin başında sıfır. Arayanın onu sıfırlayacağının garantisi yok. – EricS

+4

@EricS Bir hata olmadıkça 'error'' nil' ayarını yapmanın bir nedeni yoktur. Arayan, 'nil 'değerini döndürmediği sürece asla @ hanesine bakmamalıdır. Aksini yapmak bir hatadır. @Caleb, kodun '* error '' a atamadan önce' error'in NULL olmayan olduğundan emin olmak için kontrol etmesi gerekir. – bbum

+0

@bbum Teşekkürler - sabit. – Caleb

İlgili konular