2010-01-14 41 views
8

Từ các tài liệu tôi đã đọc @dynamic tạo ra các phương thức truy cập khi chạy, trong khi @synthesize sẽ tạo ra các trình truy cập tại thời gian xây dựng.Sự khác nhau giữa @dynamic và @synthesize là gì?

Vì vậy, hãy để tôi đoán: @dynamic lưu một số bộ nhớ và mã được giữ nhỏ hơn trong các trang bộ nhớ? hay cái gì? và có những khác biệt nào khác giữa chúng?

Sẽ ổn khi nói: "Bạn nên sử dụng @dynamic chứ không phải @synthesize" luôn luôn là một ý tưởng hay? Ý tôi là ... nếu điều đó tiết kiệm bộ nhớ thực sự, tại sao không?

Nhưng tôi đoán @dynamic có một số nhược điểm so với @synthesize, nếu không mọi người sẽ chỉ sử dụng @dynamic. Vì vậy, những hạn chế là gì?

Trả lời

21

Không. Thuộc tính động không được tạo tự động. @dynamic tính điểm đánh dấu chỉ để trình biên dịch rằng bạn sẽ cung cấp các accessor và setters bằng cách nào đó:

Từ Objective-C Programming Language Guide:

@dynamic

Bạn sử dụng từ khóa @dynamic nói với trình biên dịch rằng bạn sẽ hoàn thành hợp đồng API ngụ ý bởi một thuộc tính hoặc bằng cách cung cấp các phương thức triển khai phương thức trực tiếp hoặc tại thời gian chạy bằng các cơ chế khác như tải mã động hoặc độ phân giải phương thức động.

7

Không, @dynamic cho biết việc triển khai sẽ được cung cấp khi chạy. @synthesize yêu cầu trình biên dịch tạo các bản triển khai cho bạn. Bạn sẽ sử dụng @dynamic với, ví dụ, Dữ liệu cốt lõi, tạo ra các triển khai thuộc tính khi chạy. Nếu bạn không sử dụng, trình biên dịch giả sử bạn sẽ cung cấp các triển khai.

2

Không, @dynamic sẽ không mang lại cho bạn bất kỳ lợi thế về kích thước bộ nhớ/mã nào

Các vấn đề liên quan