Как сказал Спенсер, если вы компилируете с включенным ARC, вы не сможете вообще вызвать release
.Это ошибка, и компилятор позаботится об этом за вас.
Однако:
ObjectClass *tmpObject = [[ObjectClass alloc] init];
realObject = tmpObject;
[tmpObject release]
tmpObject
в этом случае совершенно бессмысленно как для ARC, так и для сохранения вручную.-релиз.И, фактически, при ручном удержании-отпускании вышеприведенный код немедленно освобождает выделенный объект, вызывая его освобождение (если только ObjectClass
внутренне не делает что-то странное), а realObject
останется с висящим указателем.
Т.е. этот код, как написано, вызовет сбой при первой попытке сообщения realObject
.
Чтобы уточнить:
ObjectClass *tmpObject = [[ObjectClass alloc] init];
// tmpObject now contains a reference to an instance of ObjectClass; say, 0x12340
realObject = tmpObject;
// realObject now contains a reference to that same instance; realObject == 0x12340
[tmpObject release]
// this releases the object
// both tmpObject and realObject now reference a deallocated object; much hilarity ensues.
Для ARC, вы просто делаете это:
realObject = [[ObjectClass alloc] init];