Иван Денисов писал(а):
Так не надо делать, потому что StdDocuments не требуется использовать, если документ не планируется показывать.
Документ преобразуется в StdDocuments только при желании его показать.
так надо делать, иначе ничего не будет нормально работать. это преобразование никому не мешает, оно стоит пол-копейки. зато больше не делается копий view при создании окна.
Иван Денисов писал(а):
arisu писал(а):
я так подозреваю, что это не было сделано для экономии ресурсов
да, всё верно, копировать вид, если его не требуется показывать — это совершенно непонятная трата ресурсов
или так, или куча кода, которая предполагает, что в окне открывается тот же view, который мы туда передали, сломается.
Иван Денисов писал(а):
Попытаюсь понять, зачем вообще там Views.View копируется. Я это перенёс на автомате из кода Антона, но не совсем осознавал, зачем копировать отображение.
потому что в новом документе нам для view нужен новый контекст, а там уже сидит старый контекст. без копирования не выйдет.
поскольку раньше старый код всё равно не работал — не было смысла делать копирование при импорте. сейчас старый код работает как надо, и единственный вариант сделать нормально — это импортировать документы через StdDocument, и делать копию. ну реально, это стоит почти ничего, зато мы перестаём нарушать «контракт по-умолчанию»: что если мы загрузили что-то через `OldView()`, и потом открываем с этим чем-то окно, то в окне будет именно тот view, который мы загрузили.
право слово: среда делает копии при записи документов — пусть делает и при загрузке. в 2023-м году на скорость и расход ресурсов это уже никак не повлияет, зато мы сохраним совместимость с кодом, который раньше работал, а теперь вдруг отчего-то работать перестал.