Khi nào tôi nên sử dụng init:
và khi nào tôi nên sử dụng initWithNibName:bundle:
khi tạo bộ điều khiển chế độ xem?Khi nào tôi nên khởi tạo bộ điều khiển xem bằng initWithNibName?
Trả lời
-initWithNibName:bundle:
là trình khởi tạo được chỉ định cho UIViewController. Một cái gì đó cuối cùng nên gọi nó. Điều đó nói rằng, và mặc dù các ví dụ của Apple (có lợi cho ngắn gọn hơn bảo trì trong nhiều trường hợp), nó không bao giờ nên được gọi từ bên ngoài bộ điều khiển xem chính nó.
Bạn sẽ thường xuyên xem mã như thế này:
MYViewController *vc = [[MYViewController alloc] initWithNibName:@"Myview" bundle:nil];
Tôi nói điều này là không chính xác. Nó đặt chi tiết thực hiện (tên của NIB và thực tế là một NIB thậm chí được sử dụng) vào người gọi. Điều đó phá vỡ đóng gói. Các cách chính xác để làm điều này là:
MYViewController *vc = [[MYViewController alloc] init];
Sau đó, trong MyViewController:
- (instancetype)init
{
self = [super initWithNibName:@"Myview" bundle:nil];
if (self != nil)
{
// Further initialization if needed
}
return self;
}
- (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle
{
NSAssert(NO, @"Initialize with -init");
return nil;
}
này di chuyển chi tiết thực hiện chốt lại vào đối tượng, và ngăn chặn những người gọi từ vô tình phá vỡ đóng gói. Bây giờ nếu bạn thay đổi tên của NIB, hoặc di chuyển để xây dựng có lập trình, bạn sửa chữa nó ở một nơi (trong bộ điều khiển xem) thay vì ở mọi nơi bộ điều khiển xem được sử dụng.
Nếu đây là con đường dự kiến, tại sao không tạo ra một XCode4 initWithNibName: bó: stub cho mỗi lớp ViewController rỗng, nhưng không có phương pháp init? –
Lý do tương tự là các mẫu không bao gồm tiền tố lớp, mặc dù bạn chắc chắn phải tiền tố cho các lớp của bạn và mẫu tạo ra tên có thể ngu ngốc nhất cho ứng dụng của bạn, đây là một cơn đau đầu thực sự cần khắc phục. Và IB bắt buộc khai báo ivar khi bạn tự động tạo thuộc tính, mặc dù bạn không nên khai báo ivars trong ABI mới. Các mẫu không phải lúc nào cũng là phương pháp hay nhất. Chúng thường là mẫu số ít phổ biến nhất hoạt động phần lớn trong hầu hết các trường hợp, nhưng không có nơi nào đặc biệt tốt. Mã ví dụ của Apple đang được cải thiện gần đây, nhưng nó vẫn có một cách để đi. –
Nếu bạn theo quy ước đặt tên cho ngòi giống như lớp thì mã này hoạt động tốt: '- (id) init { trả về [super initWithNibName: NSStringFromClass ([self class]) bundle: nil]; } ' – CharlesA
Sử dụng initWithNibName nếu bạn đang ... khởi tạo bằng tệp nib! Tức là, một tệp mà bạn đã tạo bằng Trình tạo giao diện.
Nếu bạn không sử dụng IB để bố cục chế độ xem của mình, bạn chỉ có thể sử dụng init.
sử dụng init khi không có tệp nib/xib, ví dụ: UI được tạo ra bằng cách mã hóa
sử dụng initWithNibName, nếu chúng ta có một nib/xib hoặc cùng phần điều khiển bởi hơn 1 nib/xib
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
} else {
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
}
đó là những gì tôi nghĩ ..
Bạn biết nếu bạn thêm ~ iphone hoặc ~ ipad vào tên nib của bạn, bạn chỉ có thể gọi initWithNibName @ "ViewController" và nó sẽ chọn đúng. – Darxval
Bạn có thể chỉ gọi init, miễn là xib có cùng tên với lớp trình điều khiển xem. Việc đóng gói là không cần thiết. Điều này giúp bạn nhập văn bản nhưng có thể không phục vụ rõ ràng.
NUDMainViewController *mainVC = [[NUDMainViewController alloc] init];
- 1. Thực hiện chế độ xem (được khởi tạo từ initWithNibName) tải tất cả subview của nó
- 2. Bộ điều khiển khởi tạo .NET MVC bên trong bộ điều khiển khác
- 3. Trình tạo giao diện có sử dụng phương thức -init để khởi tạo bộ điều khiển chế độ xem không?
- 4. Tôi có thể sử dụng phân đoạn với bộ khởi tạo của bộ điều khiển xem được chỉ định không?
- 5. Xcode: Làm thế nào để tạo một bộ điều khiển xem PopUp xuất hiện trong bộ điều khiển xem khác
- 6. Tham số truyền bằng initWithNibName:
- 7. Tôi nên tạo một vectơ khởi tạo như thế nào?
- 8. Khi nào tạo bộ điều khiển mới trong đường ray
- 9. Xem bộ điều khiển đang vẽ dưới thanh điều hướng của tôi sau khi bật ttthumbsviewcontroller
- 10. Có một bộ điều khiển xem khác trước khi bộ điều khiển chế độ xem hiện tại xuất hiện
- 11. Cố gắng khởi tạo bộ điều khiển xem từ bảng phân cảnh
- 12. Bạn nên đặt tên cho bộ điều khiển của mình trong MVC? Khi nào bạn nên tạo một cái mới?
- 13. Làm cách nào để bộ nhớ quản lý UIViewControllers bằng bộ điều khiển điều hướng?
- 14. Kết hợp Bộ điều khiển Điều hướng với Bộ điều khiển Thanh tab
- 15. Khi nào sử dụng bộ điều khiển Bộ điều khiển không dây (Bộ điều khiển không đồng bộ, servlet 3)
- 16. MKMapView treo ứng dụng khi xem bộ điều khiển popped
- 17. Tôi nên kiểm tra đơn vị gửi email từ bộ điều khiển như thế nào?
- 18. Điều khiển nguồn nào chúng tôi nên sử dụng
- 19. Làm cách nào để truy cập Bộ điều khiển Xem từ bộ điều khiển thanh tab?
- 20. dismissModalViewControllerKích thước không phát hành bộ điều khiển xem
- 21. Thay đổi bộ điều khiển xem khi Điều khiển phân đoạn thay đổi
- 22. Cách thiết lập bộ điều khiển xem gốc
- 23. UItabBar thay đổi Xem Bộ điều khiển
- 24. Tôi nên khởi tạo tăng :: mảng như thế nào?
- 25. Ẩn tất cả các bộ điều khiển xem phương thức
- 26. Tôi có nên kiểm tra bộ điều khiển (MVC) của mình không?
- 27. Làm thế nào để thêm một bộ điều khiển điều hướng với bộ dựng giao diện?
- 28. MKAnnotationView Nhấn để xem bộ điều khiển khi nút DetailsDesclosure được nhấp vào
- 29. Một bộ điều khiển hiển thị bằng cách sử dụng các chế độ xem của bộ điều khiển khác
- 30. Chuyển hướng từ Bộ điều khiển Khởi tạo không hoạt động
Bạn nên thay đổi câu trả lời lựa chọn về câu hỏi này – Eric