Вы никогда не должны этого делать, потому что, как хороший разработчик, вы следите за последними тенденциями в Objective-C и используете Автоматический подсчет ссылок .Автоматический подсчет ссылок устраняет необходимость вручную вызывать удержание / отпускание и поставляется с LLVM 3.0 и Xcode 4.2.
Если по какой-то причине вы хотите использовать ручное управление памятью, как здесь, вам не следуетвручную звоните retain
и release
в большинстве случаев.Обычно вполне нормально использовать свое суждение и не сохранять каждый аргумент индивидуально.
Единственный раз, когда это может быть хорошей идеей, это когда ваш метод в какой-то момент вызывает обратный вызов или что-то, что может привести каргумент, прежде чем использовать его.Это может быть в том случае, если, например, ваша функция берет блок и вызывает этот блок во время выполнения.Если этот блок освобождает объект, который был передан в качестве аргумента, и вы затем используете этот объект после вызова блока, аргумент, по сути, является висячим указателем.
Пример такого сценария :
- (void)myFunction:(NSString *)foo block:(void (^)())callback {
[foo retain];
callback();
// .. do some stuff
[foo release];
}
- (void)myCallingFunction {
NSString * myVariable = [[NSString alloc] initWithString:@"Test"];
[self myFunction:myVariable block:^ {
[myVariable release];
}];
}
Как видите, код [myVariable release]
будет достигнут до комментария // .. do some stuff
.