2013-07-26 3 views
0

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

Как указано here class_addProperty (...) возвращает true, но когда я пытаюсь получить доступ к ivar по его имени (или имени свойства), он всегда возвращает nil. Что может быть причиной, вызвавшей это?

+2

На первый взгляд это выглядит как плохая идея. Какова причина того, что вы хотите добавить ее во время выполнения? – Ben

+0

Это вопрос, где вам нужно показать свой код, что вы делаете для своего геттера и сеттера? –

+0

@Ben - потому что класс является частью структуры, и у меня нет доступа к его источнику. Я могу расширить класс и добавить свойства, но я пытался что-то другое, так как я не уверен, что подкласс может повлиять на рабочий процесс фреймворка. – Mercurial

ответ

1

Вы не сможете добавить ivar к классу во время выполнения. Вы можете думать о классе и его иварах, как о C-структуре. Его макет определяется во время компиляции.

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

+0

. Если вы правы, это имеет смысл тогда. Ради аргументов, смогу ли я каким-либо образом изменить структуру во время компиляции? :) Я немного читал об этом, и в документации указано (about class_addIvar): «Эта функция может быть вызвана только после objc_allocateClassPair и до objc_registerClassPair. Добавление переменной экземпляра в существующий класс не поддерживается». – Mercurial

+1

Я не уверен, что вам нужно будет делать во время компиляции? Вы можете сделать магию с помощью макросов или шаблонов C++, но я сомневаюсь, что это применимо ко многим сценариям реального мира. Если вам действительно нужно создать класс динамически или просто интересуетесь теоретической работой Objective-C, это, вероятно, лучший доступный справочник: http://www.mikeash.com/pyblog/friday-qa-2010-11 -6-создание-классы-на-выполнения-в-объективной-c.html – adpalumbo

0

Вы ищете что-то подобное с другим языком программирования?

Это похоже на добавление свойств в AS3, но objc считает, что лучше всего использовать для хранения объектов NSDictionary по ключам.

Смежные вопросы