Да и нет. Как правило, это общая схема:
// create the object, retain count 1
MyObject *myObject = [[MyObject alloc] init];
// increment the retain count in the setter
self.myObjectProperty = myObject;
// let go of the object before the end of the current method
[myObject release];
Вы можете избежать такого рода выпусков, используя пулы автоматического выпуска. Точнее, вы указываете, что хотите, чтобы объект был выпущен в ближайшее время:
MyObject *myObject = [[[MyObject alloc] init] autorelease];
self.myObjectProperty = myObject;
// all done!
Со многими из классов, предоставляемых Apple, вы можете использовать методы класса, кроме alloc / init, чтобы получить объекты, которые уже автоматически освобождены. Ваш пример может быть переписан как:
MyObject *myObject = [[MyObject alloc] init];
myObject.myString = [NSMutableString stringWithFormat:@"bla"];
Последнее замечание: -retainCount
- тупой объект. Особенно с NSStrings и другими встроенными классами, он может возвращать результаты, которые сильно отличаются от ожидаемых. Как правило, вам следует избегать этого.