setValue:forKey:
là một phần của giao thức NSKeyValueCoding , trong số những thứ khác, cho phép bạn truy cập các thuộc tính đối tượng từ giao diện của Trình tạo giao diện. setValue:forKey:
được thực hiện trong các lớp khác NSDictionary
.
setObject:forKey:
là NSMutableDictionary's
lý do để tồn tại. Chữ ký của nó xảy ra khá giống với setValue: forKey:, nhưng chung chung hơn (ví dụ: bất kỳ loại khóa nào). Có một sự trùng hợp ngẫu nhiên là chữ ký rất giống nhau.
Điều làm tăng thêm sự nhầm lẫn là việc triển khai của NSMutableDipedia setValue:forKey:
tương đương với setObject:forKey:
hầu hết các trường hợp. Trong các lớp khác, setValue:forKey:
thay đổi các biến thành viên. Trong NSMutableDictionary
đó, nó thay đổi các mục từ điển, trừ khi bạn đặt tiền tố khóa bằng ký tự '@' - trong trường hợp đó, nó sửa đổi các biến thành viên.
Vì vậy, một cách ngắn gọn, hãy sử dụng setObject:forKey:
khi bạn cần làm việc với các khóa và giá trị từ điển và setValue:forKey:
trong các trường hợp hiếm hơn khi bạn cần giải quyết KVP .
EDIT: và oh, có vẻ như điều này đã được hỏi và trả lời trước: Sự khác biệt giữa objectForKey và valueForKey?