2012-03-11 34 views
6

Tôi đang tìm hiểu về UINavigationControllerUIViewController s. Đây là ứng dụng đơn giản mà tôi xây dựng. Lưu ý rằng tôi sử dụng ARC.UINavigationController và UIViewController hoạt động như thế nào?

Ứng dụng của tôi có bộ điều khiển điều hướng và hai bộ điều khiển chế độ xem (hãy gọi cho chúng FirstViewControllerSecondViewController). Khi ứng dụng được khởi động điều khiển điều hướng, hãy đẩy FirstViewController trên ngăn xếp.

Trong FirstViewController Tôi có một nút đẩy SecondViewController khi được chạm vào. Đây là một số mã.

FirstViewController.m

-(IBAction)pushSecondViewController 
{ 
    SecondViewController *secondViewController = [SecondViewController alloc]init]; 
    [self.navigationController pushViewController:secondViewController animated:YES]; 
} 

Trong điều khiển xem thứ hai tôi có một nút mà bật bộ điều khiển xem hiện tại từ ngăn xếp.

SecondViewController.m

-(IBAction)popViewController 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

Cho đến nay, như vậy tốt. Dưới đây là các câu hỏi của tôi:

Điều hướngController có kiểm tra phiên bản hiện tại của SecondNavigationController và nếu không tồn tại thì nó sẽ tạo mới?

Nếu không, tôi có nên sử dụng singleton để đảm bảo rằng chỉ một phiên bản được tạo và sử dụng lại thay vì tạo một phiên bản mới mỗi khi nhấn nút SeconViewController?

Trả lời

4

Với mã hiện tại của bạn, trình điều khiển chế độ xem thứ hai sẽ bị hủy khi xuất hiện trong ngăn xếp, do đó không, trình điều khiển điều hướng sẽ không sử dụng lại.

Nếu bạn thực sự muốn giữ bộ điều khiển xem thứ hai xung quanh, làm cho nó trở thành tài sản mạnh của bộ điều khiển xem đầu tiên, nhưng không thực hiện điều này trừ khi bạn thực sự có lý do - phương pháp bạn đang sử dụng là tiêu chuẩn và tạo bộ điều khiển chế độ xem mới thường được ưu tiên sử dụng nhiều bộ nhớ với bộ điều khiển chế độ xem thậm chí không có trên màn hình. Bộ nhớ khan hiếm hơn tài nguyên bộ vi xử lý, việc tạo bộ điều khiển chế độ xem luôn xảy ra.

+0

Không, tôi không muốn giữ lại bộ điều khiển chế độ xem thứ hai. Tôi đã tò mò về cách điều khiển chuyển hướng hoạt động. Cảm ơn bạn đã giải thích! – ihodo

+0

Để không bắt đầu một chủ đề mới.Nếu ứng dụng của tôi chứa giả sử bốn bộ điều khiển chế độ xem, bộ điều khiển chế độ xem đầu tiên và thứ hai chỉ được sử dụng một lần trong ứng dụng. Tôi có nên bật chúng ([self.navigationController popViewControllerAnimated: YES]) từ bộ điều khiển điều hướng để không sử dụng bộ nhớ? – ihodo

+0

Không, chỉ sử dụng tính năng push và popping để di chuyển lên và xuống ngăn xếp điều hướng. – jrturton

1

Tôi đồng ý với jrturton và tôi thêm các nguyên tắc sau đây.

Trước tiên, theo ý kiến ​​của tôi, không phải là một ý kiến ​​hay khi làm bộ điều khiển là người độc thân.

Sau đó, bạn phải tự kiểm tra xem một thể hiện của một loại nào đó có tồn tại trong mảng bộ điều khiển UINavigationController "không.

@property(nonatomic, copy) NSArray *viewControllers 

Cuối cùng, bạn có thể tạo tham chiếu mạnh mẽ cho bộ điều khiển của mình nhưng không cần thiết. Việc tạo ra một bộ điều khiển mới rất nhanh. Thay vì có một tham chiếu mạnh mẽ của nó, tôi sẽ cache dữ liệu được trình bày trên nó, nếu có. Điều này để tránh người dùng phải đợi dữ liệu đã tải xuống.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn bạn! – ihodo

+0

Bạn được chào đón. upvote nếu bạn muốn :) –

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