Насколько просто было бы статически связать приложение с моей собственной настраиваемой средой выполнения obj-c? - PullRequest
2 голосов
/ 13 февраля 2011

Я играл со средой выполнения и придумал альтернативу objc_allocateClassPair / objc_registerClassPair, которая создает анонимные классы.

Анонимные классы были бы чрезвычайно полезны для того, над чем я работаю, но ябеспокоюсь о том, что, поскольку они зависят от способа реализации непрозрачных типов данных среды выполнения (и, насколько мне известно, среда выполнения является общей библиотекой, которая может изменять структуру этих типов в разных версиях ОС), возникнут проблемы.

В более общем смысле, тот факт, что среда выполнения является открытым исходным кодом, похоже, открывает определенный потенциал для творчества с языком ...

Насколько просто было бы статически ссылаться на мою измененную среду выполнения вместообщий?Придется ли мне возиться с компилятором, или это будет больше похоже на ссылки на любую другую библиотеку.

Также интересно, как это может повлиять на одобрение App Store.

1 Ответ

4 голосов
/ 13 февраля 2011

Вероятно, это в конечном итоге больше проблем, чем стоит. Конечно, вы не хотите заменять среду выполнения, используемую системными платформами. Мало того, что это, вероятно, невозможно (или, конечно, чрезвычайно сложно), но и весьма вероятно, что приложение будет невыносимо медленным, поскольку существует множество оптимизаций, которые можно выполнить только на системном уровне.

Для этого, вероятно, потребуются значительные изменения компилятора и компоновщика. Вы также столкнетесь с проблемами границ; это сайт вызовов, вызов вашего кода или вызов системы (если вы попытаетесь запустить две среды выполнения параллельно - что, вероятно, невозможно).

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

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

...