Jestem nowy w programowaniu obiektowym, a jedną z koncepcji, którą zajęło mi trochę czasu, jest niezmienność. Myślę, że żarówka zgasła ostatniej nocy, ale chcę zweryfikować:
Kiedy napotykam stwierdzenia, że niezmiennego obiektu nie można zmienić, jestem zdziwiony, ponieważ mogę na przykład wykonać następujące czynności:
NSString *myName = @"Bob";
myName = @"Mike";
Tam właśnie właśnie zmieniłem nazwę, niezmiennego typu NSString. Mój problem polega na tym, że słowo „obiekt” może odnosić się do fizycznego obiektu w pamięci lub abstrakcja „mojaNazwa”. Poprzednia definicja dotyczy pojęcia niezmienności.
Jeśli chodzi o zmienną, bardziej przejrzystą (dla mnie) definicją niezmienności jest to, że wartość niezmiennego obiektu można zmienić tylko poprzez zmianę jego położenia w pamięci, tj. Jego odniesienia (znanego również jako jego wskaźnik).
Czy to prawda, czy wciąż jestem zagubiony w lesie?
NSString, to „ wskaźnik do iNSString”, który nie jest niezmienny. I nic obiektywnego C wiem, ale zgaduję, że w swojej przykład@"Mike"tworzy nową instancjęNSStringi przypisanie go do wskaźnika ,myName. Więc nie zmieniłeś obiektu, którymyNamewskazywał, tylko to, na co wskazywał.