Mục đích của một delegate là để được thông báo khi một đối tượng khác thực hiện một hành động nào đó. Ví dụ, một trong các đối tượng của bạn muốn biết rằng một window đang được đóng, vì vậy bạn đăng ký nó làm delegate của window và triển khai phương thức windowWillClose:. Phương thức này sẽ được gọi bởi NSWindow một cách phù hợp. Vì vậy, các phương thức delegate (delegate methods) thường được định nghĩa trong một lớp khác. Cho đến một mức độ nhất định, nó cho phép bạn mở rộng chức năng của một lớp mà không cần kế thừa nó.
Một giao thức (protocol) không giống như một Java interface, mà nó là một bộ chuyển đổi cho phép hai lớp hoạt động cùng nhau. Đơn giản là nó nói rằng, nếu bạn muốn lớp A gửi cho bạn các thông điệp về trạng thái và hành động của nó, đây là những phương thức nó sẽ gọi đến delegate của nó mà bạn phải triển khai. Khác với một giao diện (interface), vì một giao diện nói rằng nếu bạn muốn kế thừa lớp này, bạn phải triển khai những phương thức này, trong khi một giao thức (protocol) nói rằng nếu bạn muốn tương tác với lớp này, bạn phải triển khai những phương thức này, vì vậy nó hơi khác biệt một chút.
@interface là khai báo lớp, nơi liệt kê các biến thành viên và phương thức. Nó được đặt trong tập tin .h, mà bạn import nếu bạn cần sử dụng lớp đó. Mã cho các phương thức nằm trong @implementation trong tệp .m. Trong Java, điều này khác biệt, tệp .java phục vụ cả hai mục đích.