2013-03-09 15 views
6

Uczę się Objectiv C, i słyszę słowo "live in the heap", z tego, co rozumiem jako coś w rodzaju nieznanego obszaru, w którym znajduje się wskaźnik, ale staram się naprawdę dokładnie opisać ten termin. Podobnie jak "powinniśmy uczynić naszą własność strong, tak aby nie mieszała się w kupie." Powiedział, że skoro nieruchomość jest prywatna, wiem, że to duża różnica Jest całkiem jasne, że chcemy się upewnić, że chcemy liczyć odniesienie do tego obiektu, więc autorelease nie wyczyści go (chcemy "zachować" to, co wiem do tej pory), ale chcę się upewnić, że rozumiem termin, ponieważ jest on używany dość często.Co znaczy "mieszkać w kupie"?

Doceniam to

+0

biodro lub sterty ???? – Shashank

+0

@Shashank przepraszam redagowałem to, moje złe (to nie jest mój pierwszy język:/choć nie jest to wymówką) – JohnBigs

+1

"powinniśmy uczynić naszą nieruchomość mocną, aby nie żyła w kupie" nie ma sensu. Pomogłoby to, gdybyś wskazał nam rzeczywiste użycie. –

Odpowiedz

14

Istnieją trzy główne obszary pamięci używane przez C (i przez exte nsion, Objective C) programów do przechowywania danych:

  • Obszar statyczny
  • Automatyczny obszar (znany również jako „stos”), a
  • Obszar dynamiczny (znany również jako „stercie ").

Kiedy przeznaczyć obiektów wysyłając swoją klasę komunikat new lub alloc, wynikowy obiekt jest alokowany w dynamicznej powierzchni magazynowej, a więc obiekt jest powiedziane, aby żyć w stercie. Wszystkie obiekty Objective-C są takie (chociaż wskaźniki te mogą znajdować się w dowolnym z trzech obszarów danych pamięci). Natomiast prymitywne zmienne lokalne i tablice "żyją" na stosie, podczas gdy globalne prymitywne zmienne i tablice żyją w statycznym magazynie danych.

Tylko obiekty sterty są odniesienia liczone, chociaż można przydzielić pamięci ze sterty używając malloc/calloc/realloc, w przypadku których przydział nie będzie odniesienia liczone: Twój kod byłby odpowiedzialny za podejmowanie decyzji, kiedy free przydzielona pamięć dynamiczna.