iOS アプリケーションで Google アナリティクスを使用しようとしていますが、コードの次の部分を見ました。
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
id<GAITracker> trackeriOS 開発の初心者として、との違いがわかりませんGAITracker *tracker。Googleで検索しましたが、説明が見つかりませんでした。誰かが私のためにそれを明確にすることができますか?
iOS アプリケーションで Google アナリティクスを使用しようとしていますが、コードの次の部分を見ました。
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
id<GAITracker> trackeriOS 開発の初心者として、との違いがわかりませんGAITracker *tracker。Googleで検索しましたが、説明が見つかりませんでした。誰かが私のためにそれを明確にすることができますか?
<> は、オブジェクトが角括弧内のプロトコル (pr プロトコル) に準拠していることを意味します。
あなたの例では、オブジェクトtrackerは任意のタイプのオブジェクトにすることができますが、GAITrackerプロトコルに準拠しています。
したがって、特定のクラスはありませんが、そのプロトコルによって宣言されたメソッドとプロパティを呼び出すことができます。
ID
id は、任意のタイプのオブジェクトを保持できます。
id<GAITracker> tracker
GAITrackerこれは、トラッカーが id タイプのオブジェクトであることを意味し、プロトコルに確認するオブジェクトを保持できます
「id」を使用すると、void * のようになり、ポインタであることがわかりますが、型はわかりません。使用すると、オブジェクトが MyProtocol を実装することを意味します。オブジェクトのタイプがわからない場合は、NSObject、UIViewController を使用できますが、気にしません。オブジェクトに一連のプロトコルを実装させたいだけです。最後に、GAITracker は、オブジェクトのタイプが GAITracker であることを意味します。
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