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*来表示。