dòng này:
[window addSubview:nav.view];
KHÔNG thêm một cái nhìn vào màn hình ngay lập tức. Nó được hiển thị bởi hệ điều hành trong một số vòng lặp chạy trong tương lai trên một chuỗi có thể khác nhau. Việc thực hiện thực tế chúng tôi không thể chắc chắn.
Đây là lý do tại sao Apple định nghĩa các phương thức đại biểu như viewDidAppear/viewWillAppear, nếu không chúng tôi sẽ không cần chúng như chúng ta biết chính xác khi các sự kiện này xảy ra.
Hơn nữa, thêm một chế độ xem phụ như bạn đã nói, thực sự giữ nguyên chế độ xem. Tuy nhiên, NOT vẫn giữ được bộ điều khiển chế độ xem hoặc bộ điều khiển điều hướng. Vì bộ điều khiển điều hướng S 01N giữ lại bất kỳ bộ điều khiển chế độ xem bổ sung nào, chúng tôi không phải sao lưu chúng bằng ngà voi.
Tuy nhiên, bạn tham chiếu đến bộ điều hướng điều hướng phải duy trì vượt quá phạm vi của phương pháp. hoặc tùy thuộc vào mã của bạn nó có thể được dealloc-ed hoặc có tham chiếu của nó bị mất.
Vì vậy, bạn phải giữ một tham chiếu đến bộ điều khiển chuyển hướng với một Ivar và thiết lập nó như vậy:
self.navigationController = nav;
Vì vậy, mặc dù nav.view chứa một con trỏ đến testViewController.view, ứng dụng không có tham chiếu điều khiển điều hướng và, bằng cách mở rộng, xem. Kết quả là một màn hình trống.
Để làm điều này rõ ràng hơn rằng nó không phải là một giữ lại/phát hành vấn đề, bạn đang thực sự bị rò rỉ trong các phương pháp sau đây:
self.testViewController = [[TestViewController alloc] initWithNibName:@"TestView" bundle: [NSBundle mainBundle]];
Bạn cần phải autorelease để cân bằng của bạn giữ lại/phát hành bởi:
self.testViewController = [[[TestViewController alloc] initWithNibName:@"TestView" bundle: [NSBundle mainBundle]] autorelease];
Vì vậy, điều đó có nghĩa là chế độ xem của bạn chưa bao giờ bị xử lý bất cứ khi nào bạn chạy mã này. Điều gì còn đảm bảo với chúng tôi rằng vấn đề của bạn thực sự là một tham chiếu bị mất.
Câu trả lời được đánh dấu của bạn không chính xác, vì những lý do tôi đã nhận xét bên dưới. –