2011-10-17 26 views
7

Tôi không hiểu cơ chế chức năng loadView: (chức năng này ở chế độ UIView).loadView: chức năng trong UIView iOS

Tôi tạo ra một dự án như sau:

  • Trước tiên, tôi tạo ra dự án cửa sổ dựa trên một của iPhone.
  • Sau đó, tôi đã tạo một lớp học UIView lớp con
  • Tiếp theo, tôi đã tạo một lớp con UIViewController, không có xib.
  • Cuối cùng, trong hàm loadView: của lớp tôi đã tạo ở bước thứ ba, tôi chỉ định đối tượng UIView (trong lớp tôi đã tạo ở bước thứ hai) làm biến số xem đối tượng UIViewController (ở bước thứ ba).

Nếu tôi bỏ qua bước cuối cùng, và đặt câu lệnh NSLog(@"test LoadView"); trong loadView: chức năng, sau đó khi dự án được điều hành, báo cáo kết quả NSLog(@"test LoadView"); được gọi liên tục, dẫn đến việc chạy là tràn.

Vui lòng giải thích cho tôi! Cảm ơn bạn!

Trả lời

15

loadView: chỉ được gọi khi thuộc tính chế độ xem là nil. Sử dụng điều này khi tạo chế độ xem theo chương trình. default: tạo đối tượng UIView mà không cần xem trước. Ví dụ:

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 
    [view setBackgroundColor:color]; 
    self.view = view; 
    [view release]; 
} 

Bằng cách thực hiện phương thức loadView:, bạn móc vào hành vi quản lý bộ nhớ mặc định. Nếu bộ nhớ yếu, bộ điều khiển chế độ xem có thể nhận được thông báo didReceiveMemoryWarning. Việc triển khai mặc định sẽ kiểm tra xem liệu chế độ xem có đang được sử dụng hay không. Nếu chế độ xem của nó không nằm trong hệ thống phân cấp chế độ xem và trình điều khiển chế độ xem triển khai phương thức loadView:, chế độ xem của nó được giải phóng. Sau đó khi cần xem, phương thức loadView: được gọi lại để tạo chế độ xem.

Không chắc lý do tại sao bạn muốn sử dụng loadView: nhưng bạn có thể làm chỉ càng nhiều trong viewDidLoad:

Reference -

  1. Why is this iPhone program not calling -loadView?
  2. loadView

Hope this helps.

+0

Cảm ơn sự giúp đỡ của bạn! Tôi có một câu hỏi: Trong trường hợp bộ điều khiển xem sử dụng các tệp nib và biến IBOutlet để tổ chức các khung nhìn, nếu nó nhận được thông điệp didReceiveMemoryWarning, thì có cách nào để giải phóng các khung nhìn, sau đó tải sau khi cần. Cảm ơn! –

+0

Có ofcourse. miễn là bạn đã khai báo các phần tử ui của bạn là 'giữ lại'. Xem ở đây để biết thêm - http://stackoverflow.com/questions/1250518/what-happens-if-i-dont-retain-iboutlet –

+0

Thưa Srikar, tôi không biết cách tải lại tệp nib lên biến IBOutlet sau khi phát hành nó. Và trạng thái nào là biến IBOutlet khi nó được nạp lại? Cảm ơn bạn đã giúp đỡ! –

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