9

Appleのガイドラインによると、それは混乱しているようです、例えば方法のためにviewWithTag

Javaでは、私はというメソッドを持っているでしょう

getViewByTag // Java version, equivalent to viewWithTag in Obj-C

しかし、私はまた、のようないくつかの方法があることを発見したので、代わりにobjectForKey単に使用しないのはなぜですか?objectWithKey

getObjectByKey or just get // Java version, equivalent to objectForKey, 
                           // but why not objectWithKey? Or not viewForKey above?
4

5 に答える 5

5

実際、ほとんどの回答が考えるよりもはるかに簡単だと思います。複雑なプログラミング言語の仕様とはあまり関係がなく、問題のオブジェクトの一意性と関係があると思います。

と言うとき、そのタグを持つ任意のビューをviewWithTag:求めています。いくつかあるかもしれません。はそのうちの 1 つを返します。UIViewUIView

ただし、objectForKey:(私には) そのキーに関連付けられた単一のオブジェクト (または nil) が存在する必要があるように思えます。したがって、キーは一種の存在であり、単一のオブジェクトにバインド (密結合) されています。

編集:

「by」の存在に言及する回答があります。これは、規則がプログラミング言語の複雑さとは何の関係もないことをさらに暗示しています。まさに自然な英語です。

NSStringstringByAppendingString:たとえば、'sが by を使用するのは、関数が動詞を追加して記述されているためだけです。withAppending とは言えません、それは悪い英語です。

于 2012-09-01T10:45:42.887 に答える
3

私の観察から

オブジェクトを設定/取得するときは、WITHを使用します。

例:NSMutableArrayオブジェクトの設定用

 - (id)initWithCapacity:(NSUInteger)numItems

オブジェクトのプロパティを設定/取得するときは、 FORを使用します。

例:タイプNSMutableDictionaryのプロパティの値を設定する場合

- (void)setValue:(id)value forKey:(NSString *)key

これがあなたの疑問を解決するのに役立つことを願っています

于 2012-09-01T10:36:31.527 に答える
3

withオブジェクトに直接属するプロパティに使用されているようです。AUIViewにはtagプロパティがあるため、 「タグプロパティが14のビューを検索する」viewWithTag:14と言い換えることができます。

キーに関連付けられたオブジェクトをディクショナリに配置する場合、このキーは必ずしもオブジェクト自体の一部である必要はありません。「キー「foo」にリンクされているオブジェクトを探してください」objectForKey:@"foo"と言う方法です。

于 2012-09-01T10:40:41.193 に答える
0

Apple のガイドラインは、いつ for または with を使用するかについて、そのような主張をしていません。コーディング規約のポイントは、引数の型が何であるかを示し、自然に聞こえるメソッド シグネチャを記述することです。

メソッド名に for または with を使用する理由は、メソッドの最初のパラメーターの型または目的を識別して、読みやすくするためです。

Apple 自体はいくつかの規則を使用していますが、それが基本的な目的であり、メソッド名のメソッドの最初のパラメーターを for または with のいずれかで識別しようとするだけで、具体的な善悪はありません。

また、Apple の規則については、get(whatever) は実際の規則の一部でさえないため、いつ get を使用するかどうかを尋ねることができます。

これを読んでください http://cocoadevcentral.com/articles/000082.php

また、(by)NSURL urlByAppendingPathComponent などを忘れないでください-それを感じてください。間違いはありません

于 2012-09-01T11:44:57.647 に答える
0

パラメータが所有されている、または所有される予定の場合、または「with」という単語の左側にあるオブジェクトによって比較的永続的な属性になる場合は常に「with」を使用します。

  • initWithCapacity/ arrayWithCapacity- 容量は、呼び出されるコンテナ オブジェクトの属性になり、比較的永続的になります (初期容量を超えてオブジェクトを追加するまで)

  • viewWithTag– 指定された「タグ」属性を「持つ」ビューを返します。

「for」を使用して、「目的の」オブジェクトとそれに到達するために使用する「トークン」オブジェクトとの間のより緩やかな関連付けを示します。- objectForKey/ attributeForValue- 通常、「オブジェクト」はキーを所有していません。- documentForWindow– ウィンドウは、ドキュメントではなく、ウィンドウ コントローラーによって所有されます。さらに、各ドキュメントに複数のウィンドウが存在する可能性があります。

ただし、単一のメソッド呼び出し内で同じタイプの複数のオブジェクトをより緩やかに関連付けるには、次のようなものを使用するのが通例です。

doSomethingForFoo:withThisOtherFoo:havingYetAnotherFoo:

したがって、このような複雑な呼び出しの順序は次のとおりです。

  1. 為に
  2. 持つ
于 2012-09-02T23:54:21.557 に答える