0
を定義するために、私は、文字列プロパティプリプロセッサは許可していません「:」トークンでのマクロでプロパティ
#define STRING_PREF(NAME) \
@property (nonatomic, strong, getter=NAME, setter=set_##NAME##:) NSString * NAME;
を定義するマクロを作成しました、私は以下のようなものを、それを使用してみてください:
STRING_PREF(username)
が、次のエラーで終了します。
error: pasting formed 'set_username:', an invalid preprocessing token
STRING_PREF(username)
^
foo.h:16:62: note: expanded from macro 'STRING_PREF'
@property (nonatomic, strong, getter=NAME, setter=set_##NAME##:) NSString * NAME;
^
1 error generated.
プリプロセッサでセレクタ名を生成することはできませんか?
_ "文字列は' strong'ではなく 'copy'プロパティとして定義する必要があります。"どうして?これを示唆する文書は見つかりません。 –
@QwertyBob単純に 'NSString'には変更可能なサブクラスがあるので、あなたが不変のものの代わりにMutableの文字列で渡されたかどうかは分かりません。 –
この記事では、それをうまく説明しています(古いARC保持/リリースの用語を使用していますが)。http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain –