1、 id關鍵字在編譯時不會被檢查,而NSObject在編譯時會被檢查。
2、 id可以是任何對象,也包括非NSObject對象。
3、 然後通過代碼比較一下:
NSMutableArray *array=[[NSMutableArray alloc]initWithObjects:@"111111", nil];
NSUserDefaults *Store_Update = [NSUserDefaults standardUserDefaults];
id jsonObject=[Store_Update objectForKey:@"json"];
NSObject *object=[array objectAtIndex:0];
NSLog(@"\n====%@\n%@",jsonObject,object);
由上面的代碼可以看出,定義id的時候不使用*,NSObject卻需要不然就會報錯。
4、在NSObject.h中,可以看到NSObject類的定義如下 :
在objc.h中,可以看到id的定義如下
兩個類型都含有Class isa,但NSObject同時包含了一些其它的方法,并需要實作NSObject協定,是以NSObject*可以用id來表示。但id不能用NSObject*來表示。