22

iOS アプリケーションで Google アナリティクスを使用しようとしていますが、コードの次の部分を見ました。

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

id<GAITracker> trackeriOS 開発の初心者として、との違いがわかりませんGAITracker *tracker。Googleで検索しましたが、説明が見つかりませんでした。誰かが私のためにそれを明確にすることができますか?

4

5 に答える 5

29

<> は、オブジェクトが角括弧内のプロトコル (pr プロトコル) に準拠していることを意味します。

あなたの例では、オブジェクトtrackerは任意のタイプのオブジェクトにすることができますが、GAITrackerプロトコルに準拠しています。

したがって、特定のクラスはありませんが、そのプロトコルによって宣言されたメソッドとプロパティを呼び出すことができます。

于 2013-11-06T12:49:54.303 に答える
1

ID

id は、任意のタイプのオブジェクトを保持できます。

id<GAITracker> tracker

GAITrackerこれは、トラッカーが id タイプのオブジェクトであることを意味し、プロトコルに確認するオブジェクトを保持できます

于 2013-11-06T12:50:23.770 に答える
1

「id」を使用すると、void * のようになり、ポインタであることがわかりますが、型はわかりません。使用すると、オブジェクトが MyProtocol を実装することを意味します。オブジェクトのタイプがわからない場合は、NSObject、UIViewController を使用できますが、気にしません。オブジェクトに一連のプロトコルを実装させたいだけです。最後に、GAITracker は、オブジェクトのタイプが GAITracker であることを意味します。

于 2013-11-06T12:50:33.917 に答える
0

1. id 型は、任意のオブジェクト型を保持できるジェネリック型として設計されています (つまり、id は int や BOOL などのプリミティブ型では機能しません)。

2. 外部データを処理するクラスがあるとします。データがどこから来るのかはわからないか、気にしませんが、多くの異なるタイプを処理できるように準備する必要があります。データはテキスト ファイルから取得される場合があり、その内容が読み込まれ、NSString としてメソッドに渡されます。独自のプログラムでデータを別の場所で処理する必要がある場合、データは NSArray または NSSet になります。あるいは、データはインターネットから JSON 応答として取得される可能性があり、NSDictionary に解析する必要があります (JSON が何であるかを知らなくても心配する必要はありません。これについては後で説明します)。

- (void)processData:(id)someData {

    if ([someData isKindOfClass:[NSString class]])
        NSLog(@"input data is %@", someData);

    else if ([someData isKindOfClass:[NSArray class]]) {
        // Cast someData into an NSArray
        NSArray *dataArray = (NSArray *)someData;
        NSLog(@"First object in dataArray is %@", [dataArray objectAtIndex:0]);
    }

    else if ([someData isKindOfClass:[NSDictionary class]]) {
        // Cast someData into an NSDictionary
        NSDictionary *dataDict = (NSDictionary *)someData;
        NSLog(@"Keys in dataDict are %@", [dataDict allKeys]);
    }

    else if ([someData isKindOfClass:[NSData class]])
        NSLog(@"someData is a bag of bits.");

    else
        NSLog(@"someData is an unsupported type:\n%@", someData);
}

このリンクで詳細を取得できます http://www.binpress.com/tutorial/learn-objectivec-objects-part-8-dynamic-typing/68

于 2015-08-13T06:33:35.363 に答える