Tôi chưa quen với lập trình hướng đối tượng và một khái niệm khiến tôi mất một thời gian để nắm bắt là sự bất biến. Tôi nghĩ rằng bóng đèn đã tắt đêm qua nhưng tôi muốn xác minh:
Khi tôi bắt gặp những tuyên bố rằng một đối tượng bất biến không thể thay đổi, tôi rất bối rối vì tôi có thể làm như sau:
NSString *myName = @"Bob";
myName = @"Mike";
Ở đó, tôi vừa thay đổi myName, loại NSString bất biến. Vấn đề của tôi là từ, "đối tượng" có thể chỉ đối tượng vật lý trong bộ nhớ hoặc trừu tượng hóa, "myName." Định nghĩa trước đây áp dụng cho khái niệm bất biến.
Đối với biến, một định nghĩa rõ ràng hơn (với tôi) về tính bất biến là giá trị của một đối tượng bất biến chỉ có thể được thay đổi bằng cách thay đổi vị trí của nó trong bộ nhớ, tức là tham chiếu của nó (còn được gọi là con trỏ của nó).
Điều này có đúng không, hay tôi vẫn lạc trong rừng?
NSString
, nó là " con trỏ tới vàNSString
", không phải là bất biến. Tôi không biết gì về mục tiêu C, nhưng tôi đoán trong ví dụ của bạn@"Mike"
đang tạo một thể hiện mớiNSString
và gán nó cho con trỏ ,myName
. Vì vậy, bạn đã không thay đổi đối tượngmyName
được trỏ đến, chỉ những gì nó được trỏ đến.