2011-06-23 86 views
7

Tôi đã học coredata bằng cách thực hiện rất nhiều ứng dụng thử nghiệm đơn giản dựa trên mẫu điều khiển Điều hướng xcode với "sử dụng coredata" được chọn.Benifits of awakeFromNib?

Phương thức awakeFromNib trong ủy nhiệm ứng dụng là một vấn đề đối với tôi, vì tôi đang thêm các khung nhìn khác vào bộ điều khiển và thay đổi trình tự tải, để RootViewController có thể là lựa chọn thứ hai hoặc thứ ba.

Tôi đã tìm ra awakeFromNib đang làm gì và tôi đã xóa nó để đại biểu ứng dụng không còn bị ràng buộc với bất kỳ chế độ xem cụ thể nào nữa. (Vì vậy, khi tôi muốn tải RootViewController, tôi sẽ tải nó như một khung nhìn thông thường, và sử dụng viewDidLoad của riêng nó để khởi tạo managedObjectContext cho khung nhìn).

Câu hỏi của tôi: có lợi ích hiệu suất hoặc lợi ích khác bằng cách sử dụng awakeFromNIb trong AppDelegate không? hoặc là nó chỉ là một cách khác để làm điều tương tự như tôi đang làm từ phương thức viewDidLoad?

Trả lời

5

Tất cả các phương pháp đều kích hoạt tại các thời điểm khác nhau và các trường hợp khác nhau.

awakeFromNib được gọi khi tệp nib được liên kết với một lớp được tải từ đĩa. Bất kỳ lớp nào có thể sở hữu một ngòi bút đều có thể sử dụng nó. viewDidLoad chỉ được sử dụng bởi bộ điều khiển chế độ xem. Nó thường được gọi khi tải từ nib cũng nhưng nó cũng có thể được gọi bởi một khung nhìn được tạo ra trong bộ nhớ (trường hợp rất hiếm.)

Trong cả hai trường hợp, bạn chỉ đưa chức năng vào hoặc bạn chỉ muốn chạy một lần Ví dụ được tải đầu tiên. Ví dụ. một lỗi phổ biến của nubie là đặt mã trong viewDidLoad cần chạy mỗi khi chế độ xem xuất hiện. Nói như với chế độ xem chính mở ra chế độ xem chi tiết và sau đó xuất hiện lại khi chế độ xem chi tiết bị loại bỏ. Nếu mã cho chế độ xem chính nằm trong viewDidLoad, mã sẽ chỉ chạy lần đầu tiên chế độ xem chính được tải nhưng không phải bất kỳ thời điểm nào sau đó chế độ xem chính biến mất và xuất hiện trở lại.

Bạn thường không khởi tạo bất kỳ chế độ xem nào khác hoặc làm nhiều thứ trong ứng dụng của người được ủy quyền từ nib. Điều đó thường được thực hiện trong applicationDidFinishLaunching.

+0

Ok, cảm ơn. Tôi chỉ lo lắng rằng việc loại bỏ awakeFromNib trong ủy nhiệm ứng dụng và di chuyển mã khởi tạo để viewDidLoad có thể làm giảm hiệu suất. – nick