2012-02-27 6 views
21

Jak wyskoczyć z tworzenia obiektu za pomocą ARC?POCZĄTEK init obiektu z łukiem?

szukam odpowiednika tego ARC (z pamięci):

- (id)init 
{ 
    if ((self = [super init])) { 
     if (!condition) { 
      [self release]; 
      self = nil; 
      return self; 
     } 
    } 
    return self; 
} 

Odpowiedz

26

Wystarczy pozbyć się wezwanie do release i wszystko będzie w porządku. Ponieważ nie jesteś sobą, nie będzie już więcej odniesień do dawnego "ja", więc zostanie ono zwolnione.

- (id)init; 
{ 
    if ((self = [super init])) { 
     if (!condition) { 
      return nil; 
     } 
    } 
    return self; 
} 
+1

Miałem nadzieję, że tak było, ale wydawało się to zbyt proste. –

+3

Nie jest konieczne przypisywanie 'nil' do self. Możesz po prostu powiedzieć 'return nil', a ARC zwolni obiekt. –

+0

Czy po prostu 'return zero' działa? –