Да: вы нарушили правило 1 как сделать свойства .Ясно, что anotherString1
был выпущен до точки, которую вы прочитали из d.stringDerived;возможно, он даже был недействительным в точке, которую вы установили d.stringDerived.Точно так же anotherString
, очевидно, является либо постоянной строкой, либо сохраняется чем-то другим.Это было бы более очевидно, если бы вы показали свой фактический код.
Если вы определяете класс со свойством типа объекта, вы должны организовать экземпляры вашего класса для копирования или сохранения значения, назначенного этому свойству вЧтобы быть уверенным, что он все еще будет там, когда вы в следующий раз посмотрите.Если вы используете метод assign, это значение, вероятно, очень быстро станет недействительным, поскольку, скорее всего, оно будет автоматически освобождено.В общем, если тип свойства соответствует протоколу NSCopying и является изменяемым или имеет изменяемый подкласс (например, NSString, NSData, NSSet, NSArray и т. Д.), Лучше всего использовать copy, чтобы значение не изменилось ни разузадавать;в других случаях хорошо использовать retain.
Сделав это, вы также должны убедиться, что память, используемая значением свойства, правильно учтена при освобождении объекта.Установите значение любых свойств типа объекта равным nil в вашей подпрограмме dealloc.