Điều này tạo ra một đối tượng chuỗi bất biến:Ca cao: Thử nghiệm để tìm xem NSString có thay đổi hoặc có thể thay đổi không?
NSString* myStringA = @"A"; //CORRECTED FROM: NSMutableString* myStringA = @"A";
này tạo ra một đối tượng chuỗi có thể thay đổi:
NSMutableString* myStringB = [NSMutableString stringWithString:@"B"];
Nhưng cả hai đối tượng được ghi nhận theo cùng một loại đối tượng, "NSCFString":
NSLog(@"myStringA is type: %@, myStringB is type: %@",
[myStringA class], [myStringB class]);
Vì vậy, những gì phân biệt các đối tượng này trong nội bộ và làm cách nào để kiểm tra điều đó, để tôi có thể dễ dàng xác định xem biến chuỗi bí ẩn có bị biến đổi hay không có thể hoặc có thể thay đổi trước khi làm điều gì đó xấu xa với nó?
Mã của Philippe dưới đây - nếu ([myStringB isKindOfClass: [NSMutableString class]]) - hoạt động và giải quyết vấn đề thực tế. – StringSection
Tôi vẫn còn tò mò về sự khác biệt giữa một chuỗi bất biến và mutable được đại diện nội bộ, và nếu có thể được phát hiện trực tiếp (thực tế "loại đối tượng" in với NSLog). – StringSection
Hiệu chỉnh: Tôi đã nhầm, mã - nếu ([myStringB isKindOfClass: [NSMutableString class]]) - không hoạt động sau khi tất cả. Nó trả về true cho dù chuỗi là NSString hoặc NSMutableString. Như Philippe chỉ ra dưới đây (trong câu trả lời đã được chỉnh sửa của anh ấy với mã khác), dường như không có cách nào được ghi lại để phát hiện các đối tượng có thể thay đổi và không thay đổi nói chung khi chạy. – StringSection