Не так много сеттеров, которые не копируют и не сохраняют переменную, передаваемую ей, чтобы память упомянутой переменной не была перераспределена чему-либо еще, когда ее счетчик сохранения достигнет нуля.
Однако, ответ ДА, так и есть. Небольшой тестовый код показывает, что количество сохраняемых делегатов увеличилось:
NSLog(@"Retain count before: %d", [self retainCount]);
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
NSURLConnection* conn = [NSURLConnection connectionWithRequest:request delegate:self];
NSLog(@"Retain count after: %d", [self retainCount]);
который выдает в логе:
Running…
2009-07-09 02:13:40.516 delegateRetain[45123:a0f] Retain count before: 1
2009-07-09 02:13:40.525 delegateRetain[45123:a0f] Retain count after: 2
Debugger stopped.
Таким образом, вы можете довольно ясно видеть, что в connectionWithRequest:delegate:
«я» действительно имеет увеличенный счет удержания +1. Если вы чувствуете себя смелым и хотите возиться с богами EXC_BAD_ACCESS, добавьте
[conn dealloc];
NSLog(@"Retain count after dealloc: %d", [self retainCount]);
, который снова выведет «1», показывая декремент после освобождения. Тем не менее, вы получите хороший Program received signal: “EXC_BAD_ACCESS”.
, потому что NSAutoreleasePool
попытается разорвать соединение, и оно пропадет;)