Как я могу автоматически добавлять свойства в Objective-C?

StackOverflow https://stackoverflow.com/questions/111517

  •  02-07-2019
  •  | 
  •  

Вопрос

Добавляя новые свойства в классы, я обнаруживаю, что снова и снова набираю одно и то же в xcode:

  1. add TYPE *NAME; (интерфейс in .h)
  2. add @property (nonatomic, retain) TYPE *NAME; (в .h)
  3. add @synthesize NAME; (дюйм .м)
  4. 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 делает гораздо, гораздо больше...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top