2010-04-11 12 views

Odpowiedz

11

"Zarządzane" to termin marketingowy, który nie ma żadnego znaczenia technicznego. Cel C dla iPhone'a nie jest zbierany śmieci, ale wykorzystuje zachować zarządzanie pamięcią zliczającą. Więc w pewnym sensie musisz zrobić własne zarządzanie pamięcią, ale ogranicza się to do znajomości Cocoa retain counting methodology.

Edytuj: Moje komentarze do "zarządzanego" odnoszą się do previous post version. Komentarz został tutaj, ponieważ jestem zmęczony widzeniem tego słowa.

0

Odpowiedź nie jest specyficzna dla celu C. Jeśli pracujesz nad rozwojem iPhone'a, nie ... nie ma żadnego zbieracza śmieci. Jeśli jednak tworzysz dla systemu Mac OSX, istnieje możliwość czyszczenia pamięci.

3

Nie ma funkcji usuwania śmieci. Jednak każdy obiekt, który masz, ma swój licznik zatrzymania o jeden, a ty jesteś odpowiedzialny za wywołanie release lub jesteś właścicielem instancji tego obiektu. Jeśli nie zadzwonisz pod numer [<YOUROBJECT> release]; lub [<YOUROBJECT> autorelease];, obiekt pozostanie w pamięci telefonu iPhone/iPoda Touch/iPada, ale wskaźnik przestanie być wyświetlany i wystąpi wyciek pamięci, ponieważ nie można uzyskać dostępu do tego fragmentu pamięci. Autoreleasing dodaje obiekt do puli autorelease i oznacza, że ​​zostanie zwolniony w pewnym momencie w przyszłości. Zawsze używaj standardu release, gdzie to możliwe, ponieważ autorelease oznacza, że ​​pozostanie on w pamięci urządzenia przez jakiś czas, nigdy nie będziesz mieć pewności, kiedy zostanie zwolniony i jest to nieco bardziej wymagająca metoda wywoływania.

Nigdy nie dzwoń pod numer dealloc na obiekcie - zwolnienie lub automatyczne odblokowanie jest wystarczające, aw razie potrzeby obiekt zostanie automatycznie zwolniony.

Upewnij się, że nigdy nie zwalniasz obiektów, które nie są Twoją własnością, a jeśli zwolnisz obiekty, zwalniasz je, gdy już ich nie używasz - w przeciwnym razie możesz spróbować uzyskać dostęp do tego obiektu, a urządzenie nie może znaleźć obiekt i sytuacja powoduje awarię aplikacji z powodu błędu EXEC_BAC_ACCESS - aby znaleźć przyczynę problemu, otwórz Instrumenty, dodaj instrument przydzielania obiektów i włącz detekcję NSZombie w swoich preferencjach (lub dodaj instrument Zombies (dostępny tylko w iPhone SDK 3.2+)). Następnie można wyświetlić całą historię obiektu, który powoduje problem, i przejść do wiersza kodu, który spowodował problem.

Możesz przeczytać więcej here.

Mam nadzieję, że pomogło to

Powiązane problemy