Tôi đang cố gắng tự dạy cho mình mục tiêu-c bằng cách sử dụng cuốn sách nông trại lớn, đó là một cuốn sách thực sự tuyệt vời nhưng một số khía cạnh gây nhầm lẫn cho tôi.Mục tiêu-C setValue: forKey trên c loại nguyên thủy
Chương hiện tại đang nói về việc sử dụng setValue: hàm forKey mà tôi hiểu là một phương thức được xác định trong NSObject. Cuốn sách nói rằng bạn có thể sử dụng trên ac nguyên thủy như int hoặc float và đưa ra ví dụ này
Tôi có một lớp tùy chỉnh được gọi Appliance và nó là một biến Ví dụ số nguyên được gọi là điện áp mà các cửa hàng điện áp của hiện tại thiết bị tôi khởi tạo một thiết bị mới có tên gọi một
appliance *a = [[appliance alloc]init];
[a setValue:[NSNumber numberWithInt:240] forKey:@"voltage"];
sau đó ông thiết lập một setter tùy chỉnh cho điện áp và ghi lại những áp khi gọi của nó để chứng minh nó hoạt động
-(void)setVoltage:int(x) {
NSLog(@"setting voltage to %d",x);
voltage =x;
}
điều gì gây nhầm lẫn cho tôi là NSNumber numberWithInt trả về một con trỏ đến một đối tượng NSNumber được lưu trữ trên heap chính xác? do đó, làm thế nào để ông đăng nhập số nguyên được lưu trữ trong NSNumber bằng cách sử dụng mã thông báo% d. Tôi hiểu rằng sẽ đăng nhập một số nguyên nhưng không phải là một đối tượng được thông qua trong? hơn nữa tôi nghĩ rằng kể từ khi điện áp được định nghĩa là một số nguyên và không phải là một con trỏ đến một cái gì đó nó không thể giữ địa chỉ cho một đối tượng trong bộ nhớ của nó? hoặc là loại NSNumber buộc nó để giữ địa chỉ bộ nhớ của nó mà không thực sự có điện áp được khai báo như một con trỏ?
xin lỗi vì sự nhầm lẫn này chương về cơ bản đá mông của tôi.
Lưu ý rằng trong thực hành mã hóa bình thường, bạn sẽ * thường không bao giờ sử dụng 'setValue: forKey:' hoặc 'valueForKey:' để đặt/nhận các giá trị trên một đối tượng *. Chỉ cần gọi trực tiếp setter/getter. KVC chủ yếu tồn tại để hỗ trợ những thứ như ràng buộc và các hình thức lập trình meta khác. – bbum