2010-06-07 7 views
8

Używanie budować i analizować z XCode Widziałem mam przeciek pamięci w moim kodu:Potencjalny przeciek obiektu przeznaczono

- (NSString *) doIt 
{ 
    NSString *var = [[NSString alloc] init]; 

    return var; 
} 

Jest to oczywiście uproszczony urywek mojego problemu

gdzie zrobić uwalniam obiekt?

Odpowiedz

18

To jest idealna sytuacja dla autorelease.

return [var autorelease]; zwróci obiekt z jego obecną liczbą zatrzymań 1 i zmniejszy liczbę zatrzymań obiektu w pewnym momencie w przyszłości, po czym kod wywołujący powinien zachować obiekt, jeśli jest to konieczne.

+1

To deterministyczny - obiekt zostanie zwolniony po wyczerpaniu bieżącej puli autorelease. Zwykle nie jest to ważne, ponieważ obiekt nie jest już Twoją odpowiedzialnością i gwarantuje, że nie będzie przez cały czas trwania metody, dopóki sam nie stworzysz basenu. – Chuck

+0

To był słaby wybór słów. Zakładałem, że obiekt OP wejdzie do domyślnej puli autorelease i jako taki nie będzie miał kontroli nad tym, kiedy został zwolniony. Skorygowano powyżej. – warrenm

+0

czy to jest poprawne z ARC? – UserDev

Powiązane problemy