OC 30 day
這兩個都是一樣的,那到底要如何使用呢?
雖然使用NULL的地方可以是nil,使用nil的地方可以是NULL,但是不建議大家隨便使用。
C指針用NULL
int *p1 = NULL; p1指針不指向內存中的任何一個空間。
OC的類指針用nil
Person *p1 = nil; p1指針不指向任何對象。
如果一個類指針的值為nil 代表這個指針不指向任何對象。
Person *p1 = nil;
那麼這個時候,如果通過p1指針去訪問p1指針指向的對象的屬性,這時候會運行報錯。
那麼這個時候,如果通過p1指針去調用對象的方法,運行不會報錯,但是方法不會執行,沒有任何反應。
Person *p1 = [Person new];
Person *p2 = p1; 這是完全沒有問題的,p1和p2的類型都是Person指針類型的。
代表將p1的值賦值給p2,而p1的值是對象的位址,所以就把對象的地址賦值給了p2。
所以p1和p2指向了同一個對象。
無論透過p1還是p2其實修改的都是同一個對象。
2. 目前為止,只要看見了new,就說明創建了一個新的對象。
補充
NULL 是 (void *) 0 ,這個與 0 (自動型別推斷,有明確的不同,參考 https://nshipster.com/nil/