Как я могу автоматически добавлять свойства в Objective-C?
-
02-07-2019 - |
Вопрос
Добавляя новые свойства в классы, я обнаруживаю, что снова и снова набираю одно и то же в xcode:
add TYPE *NAME;
(интерфейс in .h)add @property (nonatomic, retain) TYPE *NAME;
(в .h)add @synthesize NAME;
(дюйм .м)add [NAME release];
(in .m освободить)
(Я нахожусь в среде, где не собирают мусор.)
Как я могу сделать это автоматически?
Решение
Это звучит примерно так.IIRC, в документе Objective-C 2.0 говорится, что вы могли бы пропустить шаг № 1, но в остальном я не знаю ни о каких ярлыках.
Вероятно, вы могли бы написать пользовательский скрипт для этого в Xcode.Видишь http://www.mactech.com/articles/mactech/Vol.23/23.01/2301XCode/index.html.
Другие советы
Согласно документации разработчика в 64-битных средах выполнения вы можете пропустить шаг 1.
Вы могли бы взглянуть на Эндрю Пэнга Объект RMModelObject - Я не использовал его, но он действует как объектный базовый класс, который упрощает создание модели.
Я им не пользовался, но вот кое-что из того, что выделено в readme:
- нет необходимости объявлять переменные экземпляра,
- нет необходимости писать методы доступа,
- бесплатная поддержка протокола NSCopying (
-copyWithZone:
),- бесплатная поддержка протокола NSCoding (
-initWithCoder:
,-encodeWithCoder:
),- Бесплатно
-isEqual:
реализация and -hash`,- нет необходимости писать
-dealloc
в большинстве случаев.
Вот еще одно решение, которое я изменил из эта статья (также смотрите первоначальная статья)
Версия в блоге выполняла поиск переменных за пределами блока объявления переменных и также сопоставляла имена методов.Я сделал грубое исправление, чтобы искать переменные только перед первым '}'.Это приведет к сбою, если в заголовочном файле будет несколько объявлений интерфейса.
Я установил для вывода значение "Заменить содержимое документа" и ввел как "Весь документ целиком". ....
#!/usr/bin/python
thisfile = '''%%%{PBXFilePath}%%%'''
code = '''%%%{PBXAllText}%%%'''
selmark = '''%%%{PBXSelection}%%%'''
import re
if thisfile.endswith('.h'):
variableEnd = code.find('\n', code.find('}'))
properties = []
memre = re.compile('\s+(?:IBOutlet)?\s+([^\-+@].*? \*?.*?;)')
for match in memre.finditer(code[:variableEnd]):
member = match.group(1)
retain = member.find('*') != -1 and ', retain' or ''
property = '@property (nonatomic%s) %s' % (retain,member)
if code.find(property) == -1:
properties.append(property)
if properties:
print '%s\n\n%s%s%s%s' % (code[:variableEnd],selmark,'\n'.join(properties),selmark,code[variableEnd:])
elif thisfile.endswith('.m'):
headerfile = thisfile.replace('.m','.h')
properties = []
retains = []
propre = re.compile('@property\s\((.*?)\)\s.*?\s\*?(.*?);')
header = open(headerfile).read()
for match in propre.finditer(header):
if match.group(1).find('retain') != -1:
retains.append(match.group(2))
property = '@synthesize %s;' % match.group(2)
if code.find(property) == -1:
properties.append(property)
pindex = code.find('\n', code.find('@implementation'))
if properties and pindex != -1:
output = '%s\n\n%s%s%s' % (code[:pindex],selmark,'\n'.join(properties),selmark)
if retains:
dindex = code.find('\n', code.find('(void)dealloc'))
output += code[pindex:dindex]
retainsstr = '\n\t'.join(['[%s release];' % retain for retain in retains])
output += '\n\t%s' % retainsstr
pindex = dindex
output += code[pindex:]
print output
Есть дом Кевина Каллахана Аксессуар для украшения.С веб-страницы:
Accessorizer выбирает соответствующие спецификаторы свойств на основе типа ivar - и также может автоматически генерировать явные средства доступа (1.0)...но Accessorizer делает гораздо, гораздо больше...