天天看點

id 與NSObject的差別

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的差別

由上面的代碼可以看出,定義id的時候不使用*,NSObject卻需要不然就會報錯。

id 與NSObject的差別

4、在NSObject.h中,可以看到NSObject類的定義如下 :

id 與NSObject的差別

在objc.h中,可以看到id的定義如下  

id 與NSObject的差別

兩個類型都含有Class isa,但NSObject同時包含了一些其它的方法,并需要實作NSObject協定,是以NSObject*可以用id來表示。但id不能用NSObject*來表示。