Bất cứ ai có thể vui lòng giải thích cho tôi về thời điểm sử dụng initWithNibName và khi nào thì nên sử dụng initWithCoder?Sự khác nhau giữa initWithNibName và initWithCoder
Trả lời
Từ Tài liệu của Apple:
InitWithCoder mã hóa một đối tượng để lưu trữ. Một coder chỉ thị đối tượng làm như vậy bằng cách gọi encodeWithCoder: hoặc initWithCoder :. encodeWithCoder: hướng dẫn đối tượng mã hóa các biến mẫu của nó tới bộ mã hóa được cung cấp ...
InitWithNibName Trả về một đối tượng NSNib được khởi tạo thành tệp nib trong gói được chỉ định. Sau khi tệp nib đã được tải, đối tượng NSNib sử dụng bản đồ tài nguyên của gói để định vị các tài nguyên bổ sung được tham chiếu bởi ngòi bút. Nếu bạn đã chỉ định nil cho tham số gói, đối tượng NSNib tìm kiếm các tài nguyên đó trong nhóm được liên kết với lớp của chủ sở hữu tệp nib thay thế. Nếu tệp nib không có chủ sở hữu, đối tượng NSNib tìm kiếm các tài nguyên bổ sung trong gói chính của ứng dụng.
Trước đây được sử dụng để mã hóa các đối tượng riêng lẻ trong mã của bạn, mã sau được sử dụng để truy xuất tệp NSNib chứa các đối tượng tài nguyên.
initWithNibName:
thường được sử dụng với đối tượng bộ điều khiển chế độ xem. Ý tưởng là bạn có một tệp NIB (hoặc XIB, cùng một thứ) có UIView
(hoặc NSView
) mà bạn đã thiết kế trong Trình tạo giao diện. Khi bộ điều khiển xem của bạn khởi chạy, nó có thuộc tính và ổ cắm view
mà bạn sẽ phải tự vẽ - ngoại trừ việc bạn đã thiết kế nó trong IB. Vì vậy, hàm tạo này cho phép bạn kích hoạt đối tượng điều khiển mới và thông báo cho nó trong đó tệp NIB tìm kiếm dạng xem của nó. Thảo luận về hệ thống dây điện của bạn NIB chính nó để đảm bảo điều này là thành công là một chút vượt ra ngoài chủ đề ở đây.
initWithCoder:
có một nhiệm vụ khác hoàn toàn. Khi bạn đã serialized một đối tượng sử dụng encodeWithCoder:
, cuối cùng bạn sẽ cần phải unserialize (hoặc, "decode") dữ liệu đó để biến nó trở lại thành một đối tượng của lớp của bạn.
Dù sao, để tóm tắt lại: Bạn sẽ triển khai encodeWithCoder:
và initWithCoder:
chỉ trên lớp học nếu bạn muốn đối tượng của mình hỗ trợ giao thức NSCoding
. Bạn sử dụng initWithNibName:
(thông thường bạn không tự mình thực hiện) khi bạn muốn kích hoạt một đối tượng có thể khởi tạo các thuộc tính của nó với các đối tượng được lưu trữ trong một tệp NIB.
Có một chế độ xem thực sự tuyệt vời của NSCoding
over here.
Storyboard
Bạn nên thích -initWithCoder:
để -initWithNibName
vì chỉ có cựu được gọi khi tải một cái nhìn từ Storyboard.
- 1. UIViewController (init và initWithNibName)
- 2. Sự khác nhau giữa .Equals và ==
- 3. Sự khác nhau giữa% w và% W
- 4. Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
- 5. Sự khác nhau giữa MBean và MXBean
- 6. Sự khác nhau giữa ConfigurationManager và ConfigurationSettings
- 7. Sự khác nhau giữa Tkinter và Tkinter
- 8. Sự khác nhau giữa! = Và =! trong Java?
- 9. Sự khác nhau giữa 'SpecialFolder.LocalApplicationData' và 'SpecialFolder.ApplicationData'?
- 10. Sự khác nhau giữa String.getBytes() và IOUtils.toByteArray()?
- 11. Sự khác nhau giữa presentModalViewController và presentViewController?
- 12. Sự khác nhau giữa NSInvocationOperation và NSBlockOperation
- 13. Sự khác nhau giữa TVar và TMVar
- 14. Sự khác nhau giữa onClickListener và onItemClickListener
- 15. Sự khác nhau giữa `require` và` gem`
- 16. Sự khác nhau giữa HttpUtility.HtmlEncode và Server.HtmlEncode
- 17. Sự khác nhau giữa sqlplus và sqldeveloper?
- 18. Sự khác nhau giữa JPA và JPA2
- 19. Sự khác nhau giữa DECIMAL và NUMERIC
- 20. Sự khác nhau giữa "./somescript.sh" và ". ./somescript.sh"
- 21. Sự khác nhau giữa GIT và CVS
- 22. Sự khác nhau giữa System.Drawing.Point và System.Drawing.PointF
- 23. Sự khác nhau giữa REST và WebServices
- 24. Sự khác nhau giữa sys và os.sys
- 25. Sự khác nhau giữa select() và selectAll()
- 26. Sự khác nhau giữa restartLoader và onContentChanged
- 27. Sự khác nhau giữa dbcontext.Add và dbcontext.AddObject
- 28. Sự khác nhau giữa int32_t và int_fast32_t
- 29. Sự khác nhau giữa | và || trong MATLAB?
- 30. Có sự khác nhau giữa "và"
ah, có vẻ như Jordan đã đóng đinh nó, bên dưới ;-) –