Сохраняют ли методы аргументы в Objective-C? - PullRequest
1 голос
/ 25 июля 2011

Методы сохраняют переданные аргументы? Если да, могу ли я выпустить эти аргументы в следующей строке? И если нет, то когда я освобождаю эти объекты (если я размещаю их локально)?

Ответы [ 3 ]

2 голосов
/ 25 июля 2011

Язык не будет сохранять аргументы автоматически.Тем не менее, код, который подчиняется правилам, сохранит или скопирует все, что ему нужно, после того как выполнение выйдет из его области.

Другими словами:

id object = [[SomeClass alloc] init];
[otherObject doSomethingWithObject:object];
[object release];

Этот код всегда должен быть в порядкепотому что если doSomethingWithObject: необходимо сохранить аргумент, он отправит retain, а если нет, то не будет.

1 голос
/ 25 июля 2011

Нет, они просто обрабатывают объект, они не контролируют память.

Вы должны освободить что-то в методе, который он был создан.Или, если это свойство или ивар, вы должны освободить его в сделке (если он сохранен).

0 голосов
/ 25 июля 2011

Методы не увеличивают счетчик ссылок.Однако, если вы назначите его переменной с сохранением счетчика, вам нужно явно отправить нулевое сообщение обоим.Освобождение переменной может быть сделано, когда вы больше не хотите ее использовать.Таким образом, выделенная переменная будет увеличивать счетчик ссылок каждый раз, когда ему отправляется сообщение сохранения.Поэтому вам нужно отправлять равное количество сообщений о выпуске, пока счетчик ссылок не станет равным нулю.

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