Đọc qua tài liệu hướng dẫn của Apple trên Tips and Techniques for Framework Developers, tôi đi qua tuyên bố này về initializers định:Khi nào một lớp học sẽ có nhiều hơn một trình khởi tạo được chỉ định?
Một initializer định là một phương pháp init của một lớp mà gọi một phương pháp
init
của lớp cha. (Trình khởi tạo khác gọi các phương thứcinit
do lớp xác định.) Mọi lớp công khai phải có một hoặc thêm trình khởi tạo được chỉ định.
(Nhấn mạnh thêm.)
Dựa trên sự hiểu biết và tôi thực sự, việc sử dụng rất của từ "thiết kế" -một lớp nên chỉ có một initializer được chỉ định. Nhưng theo tài liệu, nhiều người khởi tạo được chỉ định có thể chấp nhận được.
Giả sử bạn có hai (hoặc nhiều) trình khởi tạo được chỉ định, vai trò của chúng là gọi trình khởi tạo được chỉ định của lớp cha để đảm bảo khởi tạo đối tượng thích hợp. Nhưng nếu cả hai initializers được chỉ định đang gọi cùng một superclass được chỉ định initializer, thì tại sao có nhu cầu cho nhiều hơn một trong những nơi đầu tiên? Không nên lớp được cấu trúc lại để kênh tất cả các phương thức init
khác cho trình khởi tạo được chỉ định số ít?
Tôi hơi bối rối về trường hợp sử dụng hoặc mẫu thiết kế nào sẽ gọi cho nhiều trình khởi tạo được chỉ định?
Đôi khi các thông số cho mỗi bộ khởi tạo quá khác nhau để kênh vào cùng bộ khởi tạo "được chỉ định". Các khuyến nghị là bạn có initializers với các tham số ít nhất gọi một initializer duy nhất với hầu hết các thông số, nhưng điều đó không phải luôn luôn có ý nghĩa. – spstanley
Ngay cả trong trường hợp lớp của bạn có thể có khởi tạo với các tham số khác nhau rộng rãi, không chỉ một trình khởi tạo chịu trách nhiệm gọi trình khởi tạo được chỉ định của lớp cha? Không nên người khác điều chỉnh các thông số của nó và do đó gọi initializer được chỉ định trong nội bộ? – LucasTizma