Это хорошая идея, чтобы сохранить / освободить параметры метода в Objective-C? - PullRequest
5 голосов
/ 17 февраля 2009

Рассмотрим следующий пример кода ObjC:

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

Если бы этот код выполнялся в многопоточном приложении, было бы неплохо сохранить / выпустить someParam? В частности, я имею в виду сценарии, в которых переданный параметр является одноэлементным объектом, совместно используемым многими потоками. Например, следующее безопаснее?

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

1 Ответ

11 голосов
/ 17 февраля 2009

Нет, это не работа отдельных функций, чтобы попытаться обеспечить потокобезопасность для параметров.

Где-то вверх по стеку что-то передало объект, который является параметром для "doStuffWithString". Это код, который должен гарантировать, что этот объект останется действительным на протяжении всего времени вызова функции.

Две вещи для рассмотрения;

  1. В ситуациях, когда вы вызываете стороннюю или библиотечную функцию, они не будут выполнять сохранение / освобождение для вас.
  2. Если существует опасность удаления параметра, это может произойти еще до того, как ваш вызов 'retain' произойдет!

Эта тема также может быть полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...