2010-07-26 9 views

Odpowiedz

3

Z 4 metod, o których już wspomniałeś, zwykle używasz tylko obiektywów o wartości release i autorelease. free może być używany, gdy używasz c i malloc w przeciwnym razie powinieneś używać release i autorelease.

dealloc nie powinien być wywoływany przez żaden kod, ponieważ może kolidować z cyklem zatrzymywania/zwolnienia, którego cel-c używa do śledzenia zasobów. Korzystanie z dealloc prawie na pewno spowoduje awarie w środowisku wykonawczym, jeśli kiedykolwiek z niego skorzystasz.

Ostatecznym zasób użycia release i autorelease jest Apple memory management documentation

3
  • free jest przeciwieństwem malloc i jest stosowany w C. Nie będzie prawdopodobnie użyć to bardzo programowania w Objective C
  • Jeśli jesteś właścicielem obiektu, po jego zakończeniu można go ustawić jako obiekt
  • . Można również ustawić obiekt jako autorelease. Powoduje to automatyczne zwolnienie go po zakończeniu bieżącej pętli iteracji
  • Gdy licznik odniesień na obiekcie spada do zera, środowisko wykonawcze wywołuje dealloc. Nie powinno wywołać tę metodę bardziej

You "własny" przedmiot jeśli alloc, new, retain lub copy go.

Firma Apple zapewnia na ten temat some good documentation.

+1

Punkt 3: Nazwałbym to "iteracją pętli biegu" zamiast "pętlą uruchomieniową". Punkt 4: Oczywiście, miałeś zamiar powiedzieć "dealloc" zamiast "release", nieprawdaż? (przepraszam, nitpicking) – Dirk

+0

Dziękuję bardzo. To było zdecydowanie pomocne. – ar106

+0

@Dirk Dobre miejsce. Naprawiony. –

17

free() to funkcja C, której używa się do pozbycia się niepotrzebnej pamięci uzyskanej za pomocą malloc() lub innej funkcji, która ma udokumentować, że wymaga wolnej() do zwolnienia pamięci, np. strdup().

-dealloc to selektor Objective-C, który jest wysyłany przez środowisko wykonawcze Objective-C do obiektu, gdy obiekt nie jest już własnością żadnej części aplikacji.

-release jest selektor wysyłane do obiektu, aby wskazać, że jesteś rezygnując własności tego przedmiotu. Gdy obiekt nie jest własnością nikogo, jest wysyłany komunikat o błędzie -dealloc przez środowisko wykonawcze.

-autorelease jest selektor wysyłane do obiektu, aby wskazać, że są rezygnując własność obiektu. Jednakże, jeśli nikt nie jest właścicielem obiektu, ostateczna -dealloc zostanie odłożona na później, aż do jakiegoś nieokreślonego późniejszego punktu. Rzeczywiście, to, co naprawdę robisz, to przenoszenie własności na pulę autorelease, która następnie zwolni ją, gdy sama zostanie wydana (lub wyczerpana).

Nie można nigdy wysyłać obiektu -dealloc do obiektu z wyjątkiem super w metodzie obiektu -dealloc.

Powiązane problemy