2015-04-27 5 views
0

У меня есть ситуация, когда я хочу создать объект, прежде чем я узнаю, каким он будет в конечном итоге. Я знаю, каким будет его суперкласс, и хочу временно создать конкретный экземпляр этого суперкласса и разрешить другим объектам использовать его в этой форме до тех пор, пока не будет создан его «истинный» класс.Возможно ли изменить объект Objective-C на другой тип во время выполнения?

Я понимаю, что это довольно сумасшедший, и у меня нет слишком высоких ожиданий, что это возможно, но если бы я мог это сделать, это было бы удивительно. Я знаю, что среда исполнения Obj-C имеет некоторые довольно мощные функции, поэтому подумал, что это, по крайней мере, стоит спросить.

Я посмотрел в object_setClass, но при этом, как представляется, позволяет технически изменить класс объекта во время выполнения, он не позволяет реально перераспределить новый экземпляр, в комплекте со своим Иваром, в адрес исходного экземпляра, который действительно нужен мне, поскольку я не знаю конкретно, каким будет последний класс (он должен работать с любым пользовательским подклассом).

Справочная информация. Мое намерение состоит в том, чтобы предоставить объект-заполнитель, который позволит внешнему коду регистрировать зависимости и/или содержать ссылку, например, когда объект будет заполнен, эти внешние зависимости будут сохраняться, и они не придется исправлять их ссылки.

+1

Я уверен, что попытка сделать это приведет к любым видам опасности. Возможно, кто-то с интимным знанием внутренних дел мог бы это сделать, но было бы неплохо сломать следующее небольшое обновление от Apple. –

+0

Да, это должно быть то, что является стабильным и четко определенным, если нетрадиционным. – devios1

+0

Попробуйте объяснить, что вам на самом деле нужно делать, и мы можем увидеть, есть ли лучшее решение, чем это. –

ответ

2

Вы можете попробовать использовать NSProxy и в конечном итоге проксировать «реальный» базовый объект, который вам нужен.