2012-03-03 6 views
7

カテゴリの慣例は、Appleクラスを拡張するときに接頭辞を含めることです。カテゴリにマジックワードをプレフィックスとして付けるための規約は何ですか?

[string XXDataUsingUTF8]; 

(はい、それは愚かな例ですウソツキは結婚のはじまり。。)私はあまり明確だ何

は識別子がcopysetinitで始まるとき慣例があるものである。たとえば、またはnew。例えば

[request setHTTPBodyWithKeyValues: keyValues]; 

私は私の接頭辞を追加した場合、これはもはや「セッターがセットで始まる」規則に従います。

[request XXSetHTTPBodyWithKeyValues: keyValues]; 

私はセットした後、接頭辞を追加する場合一方、それは本当に、もはや接頭ません:

[request setXXHTTPBodyWithKeyValues: keyValues]; 

これはひどくsetにインポートされていませんが、私はそれがより多くなると考えます重要:initcopyなど

アップルではこれを文書化していますか?何が一般的に使用されていますか?

+2

私はこの上の任意の公式のガイドラインを見たが、ARCまたはLLVM静的アナライザ、またはその他の混乱はないの利益にはいませんでしたツールや人間があなたのコードを読んでいるなら、私は従来のプレフィックスをそのままセレクタの先頭に保つことを選択します。個人的には、カテゴリ拡張メソッド名にアンダースコアを使用しています。実際のメソッドには絶対値が含まれていないので、 "接頭辞"の一意性は保持されます。あなたの例では 'setXX_HTTPBodyWithKeyValues:'となります。大会以外の拡張方法では、それは単に 'XX_myMethodName'になります。 – pmdj

+0

これは本当に唯一の実用的な答えだと思いますか?明白なことを指摘してくれてありがとう。 :) –

+1

非常に興味深い点!いくつかの人は "namespace"という文字列を後置するのを好みます: 'setHTTPBodyWithKeyValues_XX:'はそれほど美しいものではありません。 –

答えて

11

あなたは、インターフェイス宣言で明示的方法ファミリを設定できます

@interface NSObject (StevenFisherCategory) 

- (NSData *)XXCopyDataUsingUTF8 __attribute__((objc_method_family(copy))); 

@end 
+0

これは優れた点です。これは、特にARCで、LLVMを使用してXcode 4.3以降で使用する方法です。 –

+1

偉大な答え。プレフィックス付きのinitメソッドを動作させる方法を理解しようとしていました。 '' '__attribute __((objc_method_family(init)))' ''トリックをしました – edelaney05

関連する問題