0

いくつかの関数といくつかのメソッドでインターフェイスを宣言します。宣言する代わりに:
-(void)foo;
+(void)bar;

私は宣言する:
-(void)foo;
void bar();

大丈夫だと思います。コンパイラは問題ないと判断します。他のプログラマーもそれでいいと思いますか?

4

3 に答える 3

2

C関数または静的メソッドを選択する際の懸念事項: (私の頭の上から)

  • 名前の競合: 静的メソッドを優先します。
  • 機能性: 名前は道路のようなもので、現在地と行ける場所を教えてくれます。コードが何か他のものに関連している場合は、それをクラス メソッドにする必要があります。無関係なメソッド(xxxUtilsクラス)のガベージダンプであっても。それ以外の場合は、C 関数を使用します。
  • 局所性: より高いレベルの単位でコードをグループ化する方法として、静的メソッドを優先します (これは、30,000 フィートから見やすく、理解しやすいためです)。
  • タイピング: AC 関数はそれをあまり必要としません。CGPointMake の便利な関数は、タイピングが増えるとあまり便利ではなくなります。
  • リンク: C 関数への不正な呼び出しが実行前に見られます。
  • グローバル状態: 選択基準ではありませんが、OOP 言語では、C 関数とクラス メソッドの出力は入力のみに依存する必要があります。グローバル状態に触れると、カプセル化に反し、依存関係が隠され、コードが理解しにくくなります。
  • オーバーロード: でタグ付けすると、C 関数をオーバーロードできます__attribute__((overloadable))
于 2013-01-17T11:22:50.250 に答える
1

質問のポイントがよくわかりません。同様に、それらをすべて一緒に宣言できます。

 -(void)foo;
 +(void) bar;
 void bar();

すべてがObjectiveCで合法であり、異なるエンティティ(インスタンスメソッド、クラスメソッド、C関数)であるため、同じ名前で共存できます。void bar()前者のどちらからでも問題なく呼び出すことができますが、void bar()はへの参照を渡さないため、v/vは呼び出せませんself

質問がスタイルの問題である場合は、Objective-Cではないため、@interfaceとは別にC関数を宣言します。

最近のバージョンのClangでは、これらが公開されていない場合は、これらを宣言する必要はまったくありません...

アップデート

@Janoの回答を読んだことで、質問のポイントがもう少し理解できました。どちらかが同じ結果を達成できる(どちらもにアクセスできないself)関数ではなく、クラスメソッドを選択する理由です。最近、私は常にクラスメソッドを使用する傾向がありますが、それはobj-Cコンテキストでは意味があるようです。ヤノの答えは、その理由についてかなり網羅的であるように思われます。

于 2013-01-17T11:04:56.797 に答える
0

それはUSED-TOの問題です。

pow() のような C でのみ使用可能な関数が必要でない限り、Objective-C スタイルのメソッドを使用します。

Cメソッドを追加したい場合でも、AllCMethods.cすべてのobj-cメソッドとCメソッドを呼び出し、覚え、使用するのが簡単になるため、別のファイルにする必要があると思います。

于 2013-01-17T11:15:52.407 に答える