2011-10-20 15 views
56

Rozumiem, że ustawienie ivar zachowuje teraz przypisywany obiekt, ponieważ zmienne domyślne są ustawione na kwalifikator strong. Ponieważ ivars są w zasięgu obiektu, są one zadeklarowane i strong zachowuje obiekty w zakresie zmiennej, to znaczy, że wartość ivars nigdy nie zostanie zwolniona, podczas gdy obiekt zawierający ivar jest wciąż żywy.Właściwość vs. ivar w czasach ARC

Czy to prawda?

Jeśli tak, czy mam rację, sądząc, że pod względem zarządzania pamięcią nie ma już żadnej różnicy między właściwościami utrzymującymi (silnymi) a prostymi ivar?

+1

Dobre pytanie, zastanawiałem się w pewnym momencie. –

Odpowiedz

67

Jeśli zmienna:

  1. została zadeklarowana w klasie używając ARC.
  2. Służy wyłącznie do implementacji klas (nie ujawnia się jako część interfejsu klasy).
  3. Nie wymaga żadnego KVO.
  4. Nie wymaga żadnego niestandardowego programu pobierającego/ustawiającego.

Następnie należy uznać je za ivar bez odpowiedniego @property/@synthesize i odnoszący się do niego bezpośrednio w realizacji. Jest on zgodny z Encapsulation, aby zadeklarować ten ivar w pliku implementacji klasy.

// MyClass.h 
@interface MyClass : ParentClass 
@end 

// MyClass.m 
@implementation MyClass { 
    NSString *myString; 
} 

- (void)myMethod { 
    myString = @"I'm setting my ivar directly"; 
} 
@end 
  • to ivar będą traktowane jako __strong przez kompilator łuku.
  • Zostanie zainicjowany na nil, jeśli jest to obiekt lub 0, jeśli jest to obiekt podstawowy.
+0

Nie mogę być pewien 2 rzeczy. U może uzyskać dostęp do publicznego ivar używając classInstance-> iVar = @ "Nowa wartość" –

+2

@DisisMikhaylov Dobra uwaga. Chociaż myślę, że odejdę w "punkcie 2", ponieważ mówię o najlepszej praktyce, a prawdopodobnie nie jest dobrą praktyką bezpośredni dostęp do ivars klasy. – bearMountain

+0

zwięzła odpowiedź, dzięki. –

6

Nie można użyć KVO i wykonać niestandardowego programu pobierającego i ustawiającego ze zmiennymi instancji innymi niż te, które są bardzo podobne podczas korzystania z ARC.

Powiązane problemy