2

クラスに新しいプロパティを追加するとき、xcode で同じことを何度も入力していることに気付きます。

  1. add TYPE *NAME;(.h インターフェース内)
  2. add @property (nonatomic, retain) TYPE *NAME;(.h)
  3. add @synthesize NAME;(.m)
  4. add [NAME release];(.m dealloc で)

(私はガベージコレクションされていない環境にいます。)

どうすればこれを自動的に行うことができますか?

4

5 に答える 5

1

それはほぼ正しいように聞こえます。IIRC、Objective-C 2.0 doc には、ステップ 1 を省略できる可能性があると書かれていますが、それ以外のショートカットについては知りません。

おそらく、Xcode 内でこれを行うユーザー スクリプトを作成できます。http://www.mactech.com/articles/mactech/Vol.23/23.01/2301XCode/index.htmlを参照してください。

于 2008-09-21T18:15:20.633 に答える
1

64 ビット ランタイムの開発者向けドキュメントによると、ステップ 1 を省略することができます。

于 2008-10-02T20:42:35.543 に答える
0

Andrew Pang のRMModelObjectを見ることができます。私は使用していませんが、モデルの作成を簡素化するオブジェクトの基本クラスとして機能します。

私はそれを使用していませんが、readme で強調表示されているものの一部を次に示します。

  • インスタンス変数を宣言する必要はありません。
  • アクセサーメソッドを書く必要はありません。
  • 無料の NSCopying プロトコルのサポート ( -copyWithZone:),
  • 無料の NSCoding プロトコルのサポート ( -initWithCoder:-encodeWithCoder:)、
  • free-isEqual:および -hash` 実装、
  • ほとんどの場合、書く必要はありません-dealloc
于 2008-10-08T20:30:50.180 に答える
0

この記事から変更した別のソリューションを次に示し ます (最初の記事も参照してください) 。

ブログのバージョンは、変数宣言ブロックの外側で変数を検索し、メソッド名も一致していました。最初の '}' より前の変数のみを検索するように大まかな修正を行いました。ヘッダー ファイルに複数のインターフェイス宣言がある場合、これは壊れます。

出力を「ドキュメント内容の置換」、入力を「ドキュメント全体」に設定したのですが……。

#!/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
于 2009-06-22T18:34:13.327 に答える