2009-02-17 11 views
5

Rozważmy następujący przykład kodu objc:Czy warto zachować/zwolnić parametry metody w Objective-C?

- (void)doStuffWithString:(NSString *)someParam { 
    // Do stuff with someParam 
}

Jeśli ten kod były wykonywane w wielowątkowych aplikacji, byłby to dobry pomysł, aby zachować/uwolnienia someParam? W szczególności myślę o scenariuszach, w których parametr przekazania jest pojedynczym obiektem współdzielonym przez wiele wątków. Czy na przykład poniższe są bezpieczniejsze?

- (void)doStuffWithString:(NSString *)someParam { 
    [stringParam retain]; 
    // Do stuff with someParam 
    [stringParam release]; 
}

Odpowiedz

11

Nie, zadaniem poszczególnych funkcji nie jest zapewnienie bezpieczeństwa dla parametrów.

Gdzieś w górze stos coś przekazuje obiekt, który jest parametrem "doStuffWithString". Jest to kod, który powinien gwarantować, że obiekt pozostanie ważny przez długość wywołania funkcji.

Dwie rzeczy do rozważenia;

  1. W sytuacjach, w których użytkownik dzwoni do innej firmy lub funkcji bibliotecznej, nie wykona on dla ciebie żadnej czynności.
  2. Jeśli istnieje niebezpieczeństwo skasowania tego parametru, może się to zdarzyć, zanim wezwanie do "zatrzymania" nawet się wydarzy!

This thread może być pomocne.