Я изучаю архивирование данных и понимаю, что стандартные классы сбора обеспечивают простое архивирование, однако я хочу заархивировать NSMutableArray
.Поэтому я прочитал, что, поскольку NSMutableArray
"является" NSArray
, потому что это подкласс, то это нормально.
Но эта идея ставит меня в тупик, и я понимаю, что это базовая концепция Objective-Cпоэтому я хочу убедиться, что я правильно понял.
Предположим, у вас есть класс "автомобиль" с подклассом "джип".Теперь, основываясь на вышесказанном, вы можете сказать следующее:
automobileInstance=jeepInstance;
... потому что джип - это подкласс автомобиля.
Но мне это кажется задом наперед,Я думаю, что вместо этого вы должны сказать, что экземпляр подкласса может быть равен его экземпляру суперкласса:
jeep = auto
Потому что в конце концов джип "является" автомобилем, но не все автомобилиджипы.
Так почему же вы можете сделать это:
NSArray*newArray=nsmutableArrayInstance;
Это та же идея, что и сказать:
automobile=jeep;
в моем примере.
Ваш подкласс, возможно, добавил много новых переменных экземпляра, например, но если вы установите его равным суперклассу, эти iVars "потеряны" или, по крайней мере, суперкласс не распознает их, поэтомуне похоже, что объект действительно захватывает объект.
Идти в другую сторону, говоря, что sublass instance = superclass instance
имеет смысл, поскольку все в суперклассе находится в подклассе;вы просто не получаете значения для дополнительных iVars, которые находятся в подклассе, но не в суперклассе, они могут быть установлены в ноль по умолчанию, но, по крайней мере, они существуют.