NSDictionary cung cấp một ánh xạ từ khóa tới đối tượng. Đơn giản, NSDictionary lưu trữ các "đối tượng" ở các vị trí được chỉ mục bởi "khóa".
Vì các đối tượng được lưu trữ tại các vị trí cụ thể, NSDictionary yêu cầu giá trị của khóa không thay đổi (nếu không, đối tượng sẽ đột nhiên ở một vị trí sai cho khóa của nó). Để đảm bảo yêu cầu này được duy trì, NSDictionary luôn sao chép các khóa vào vị trí riêng của nó.
Hành vi sao chép khóa này là một phần cơ bản của cách NSDictionary hoạt động nhưng cũng là một hạn chế: bạn chỉ có thể sử dụng một đối tượng Objective-C như một khóa trong NSDictionary nếu nó hỗ trợ giao thức NSCopying. Hơn nữa, khóa nên nhỏ và hiệu quả đủ để việc sao chép không gây gánh nặng cho CPU hoặc bộ nhớ.
Điều này có nghĩa là NSDictionary thực sự chỉ phù hợp với các đối tượng loại "giá trị" làm khóa (ví dụ: chuỗi nhỏ và số). Nó không lý tưởng cho việc mô phỏng ánh xạ từ đối tượng hoàn chỉnh đến các đối tượng khác.