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