2

OBJ-Cのプロトコルについて質問があります。たとえば、プロトコルを使用してidオブジェクトを宣言する行をよく目にします。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    id  <NSFetchedResultsSectionInfo> secInfo = [[self.fetchedResultsController sections]objectAtIndex:section];
    NSLog(@"%i",[secInfo numberOfObjects]);
    return [secInfo numberOfObjects];
}

次の行がまったくわかりません。

id  <NSFetchedResultsSectionInfo> secInfo = [[self.fetchedResultsController sections]objectAtIndex:section];
  1. 「id」とはどういう意味ですか?
  2. 「objectAtIndex:section」はどのオブジェクトを返しますか?
  3. オブジェクトで「[secInfonumberOfObjects]」を呼び出すことができるのはなぜですか?つまり、メソッドnumberOfObjectsはどのように存在しますか?

CoreDataを学習しようとしていますが、これを理解せずに実際に続行することはできません。ありがとうございました。

4

5 に答える 5

3

どういうid <ProtocolName>意味ですか?

これは、「クラスがProtocolNameプロトコルを実装するObjective-Cオブジェクトへのポインタ」を意味します。

どのオブジェクトがobjectAtIndex:section返されますか?

<NSFetchedResultsSectionInfo>プロトコルに準拠する任意のクラスのオブジェクトを返します。

なぜ[secInfo numberOfObjects]オブジェクトを呼び出すことができますか?

なぜだめですか?

つまり、この方法はどのようにnumberOfObjects存在するのでしょうか。

返されたオブジェクトのクラスはそれを実装します。

于 2013-01-07T17:38:56.693 に答える
2

Javaのバックグラウンドがある場合NSFetchedResultsSectionInfoは、具象クラスではなくJavaインターフェースと考えてください。関数の内容は、次のようになります。

NSFetchedResultsSectionInfo secInfo = this.fetchedResultsController.sections().objectAtIndex(section); 
System.out.println(secInfo.numberOfObjects());
return secInfo.numberOfObjects();

numberOfObjectsこれは、Objective-Cでこのタイプのものを宣言するのと同等の方法であるため、呼び出すことができますid <NSFetchedResultsSectionInfo> secInfo。これは特定のクラスではなく、「インターフェイス」です。

于 2013-01-07T17:46:33.487 に答える
1
  1. id「あらゆるタイプのオブジェクト」を意味します。id <NSFetchedResultsSectionInfo>「プロトコルを実装する限り、任意のタイプのオブジェクトNSFetchedResultsSectionInfo。プロトコルは単にメソッドシグネチャのリストであり、オブジェクトがプロトコルを実装する場合、そのプロトコルに必要なすべてのメソッドを実装する必要あることを意味します。

  2. あなたは本当に気にしません。プロトコルを実装するオブジェクトであればどれでもNSFetchedResultsSectionInfoかまいませんが、オブジェクトの種類は気にしません。知っておく必要があるのは、NSFetchedResultsSectionInfoプロトコルから必要なメッセージを送信できることだけです。

  3. secInfoNSFetchedResultsSectionInfoプロトコルを実装するオブジェクトです。プロトコルを見ると(cmd +クリックするとその定義が表示されます)、リストに。というメッセージがあることがわかりますnumberOfObjects。これは、このプロトコルを実装するすべてのオブジェクトがを実装するという保証があることを意味しますnumberOfObjects

于 2013-01-07T17:45:02.367 に答える
1
  1. idObjective-Cオブジェクトへのポインタのジェネリック型です。タイプの変数を宣言するidことは、それが任意のオブジェクトを参照できることを意味します。型の変数を宣言するid <SomeProtocol>ことは、任意のクラスのオブジェクトを参照できることを意味しますが、に準拠する必要がありSomeProtocolます。

  2. [self.fetchedResultsController sections]NSFetchedResultsSectionInfo配列を返します。各要素は、プロトコルを実装し、テーブル内のセクションを表すオブジェクト(クラスは不明)です。実装しているメソッドは、インデックスがパラメーターとして渡されるセクションの行数を知りたいので、その配列をsection呼び出して、そのセクションを表すオブジェクトを取得します。objectAtIndex:sectionid <NSFetchedResultsSectionInfo>

  3. プロトコルを実装するオブジェクトを参照する[secInfo numberOfObjects]ことを宣言したので、呼び出すことができます。そのプロトコルのメソッドです。(実際に機能するのは、実行時に、の文書化された動作から予想されるように、実際にはそのプロトコルを実装するオブジェクトであるためです。)secInfoNSFetchedResultsSectionInfonumberOfObjects-[NSFetchedResultsController sections]

CoreDataを学習しようとしていますが、これを理解せずに実際に続行することはできません。

プロトコルは単なるコアデータではありません。それらに問題がある場合は、 Objective-C言語のドキュメントを読むことをお勧めします。

于 2013-01-07T17:49:21.177 に答える
0

「id」とはどういう意味ですか?

id<NSFetchedResultsSectionInfo>オブジェクトがNSFetchedResultsSectionInfoに準拠していることを保証するために使用されます。準拠していない場合は、コンパイラの警告が表示されます。これには便利です。

「objectAtIndex:section」はどのオブジェクトを返しますか?

idオブジェクトへのすべてのポインタのルートです。

通常id、返されるオブジェクトが型であることが確実でない場合に使用されます。知られている唯一のことは、それがNSFetchedResultsSectionInfoプロトコルに準拠しているということです。つまり、どのタイプのオブジェクトが返されるかはわかりません。そのプロトコルに準拠しているだけです。

オブジェクトで「[secInfonumberOfObjects]」を呼び出すことができるのはなぜですか?つまり、メソッドnumberOfObjectsはどのように存在しますか?

ドキュメントを参照してください。クラスによって実装されています。

于 2013-01-07T17:50:50.353 に答える