Это зависит от того, что на самом деле является myObject
, и от того, как у вас определены его свойства. Предполагая, что они определены для выпуска, например, здесь:
@property (nonatomic, retain) SomeClass *myProperty;
тогда да, вы можете сделать это. Сеттеры автоматически синтезируют для вас релизы target-c и устанавливают нулевые старые значения свойств перед сохранением и назначением новых значений.
Однако , хотя с вашим управлением памятью нет проблем, все же есть проблема с вашим кодом. Помните, что myObject
- это указатель, как в C или C ++. Это означает, что если вы добавите его в myDic
, а затем измените свойства объекта позже (например, на следующей итерации цикла for), эти изменения будут отражены, когда вы извлечете объект из словаря в какой-то момент в будущем. То, что вы хотите, это что-то вроде этого:
myObject = nil
myDict = new Dictionary
for(int i; i < 10;i++)
myObject = new Object
myObject.value1 = new data from somewhere
myObject.value2 = new data from somewhere
myDic setValue:myObject forKey:i
myObject release
end for
Что делает, это освобождает myObject
после помещения его в словарь (все классы коллекции какао сохраняют любой объект, который вы в них помещаете, и освобождают объекты, когда они либо удаляются, либо сама коллекция освобождается), поэтому иметь утечку, а также выделять новый экземпляр Object
на каждой итерации, чтобы вы не модифицировали один и тот же объект снова и снова.
Если вы не читали Руководство по управлению памятью для какао от Apple , я настоятельно рекомендую это сделать. Это очень информативно.