Sự khác biệt giữa viewDidLoad
và là viewDidAppear
gì? Loại mã khởi tạo hoặc mã tùy chỉnh nào đi vào các chức năng đó?
Ví dụ: presentModalViewController
chỉ hoạt động khi có mặt viewDidAppear
và không hoạt động viewDidLoad
.
Sự khác biệt giữa viewDidLoad
và là viewDidAppear
gì? Loại mã khởi tạo hoặc mã tùy chỉnh nào đi vào các chức năng đó?
Ví dụ: presentModalViewController
chỉ hoạt động khi có mặt viewDidAppear
và không hoạt động viewDidLoad
.
Câu trả lời:
viewDidLoad
được gọi chính xác một lần, khi bộ điều khiển khung nhìn được tải lần đầu tiên vào bộ nhớ. Đây là nơi bạn muốn khởi tạo bất kỳ biến phiên bản nào và xây dựng bất kỳ chế độ xem nào tồn tại trong toàn bộ vòng đời của bộ điều khiển chế độ xem này. Tuy nhiên, tầm nhìn thường chưa được nhìn thấy vào thời điểm này.
viewDidAppear
được gọi khi dạng xem thực sự hiển thị và có thể được gọi nhiều lần trong vòng đời của Bộ điều khiển dạng xem (ví dụ: khi Bộ điều khiển dạng xem phương thức bị loại bỏ và dạng xem lại hiển thị). Đây là nơi bạn muốn thực hiện bất kỳ hành động bố cục nào hoặc thực hiện bất kỳ bản vẽ nào trong giao diện người dùng - ví dụ: trình bày bộ điều khiển chế độ xem phương thức. Tuy nhiên, bất cứ điều gì bạn làm ở đây đều có thể lặp lại. Tốt nhất không nên giữ lại mọi thứ ở đây, nếu không bạn sẽ bị rò rỉ bộ nhớ nếu bạn không giải phóng chúng khi chế độ xem biến mất.
Xem: https://developer.apple.com/documentation/uikit/uiviewcontroller
viewDidLoad
nói chung chỉ được gọi một lần và chỉ một lần, có một tình huống có thể được gọi lại. Cụ thể, nếu bạn từng nhận được một didReceiveMemoryWarning
, các chế độ xem không hiển thị của bạn có thể được giải phóng (mặc dù các bộ điều khiển chế độ xem không bị ảnh hưởng) và khi bạn quay lại, viewDidLoad
có thể được gọi lại cho chúng.
didReceiveMemoryWarning
. Nhưng tôi đồng ý rằng nếu bạn áp dụng các thông lệ tốt khi viết bài của mình viewDidLoad
, bạn sẽ ổn. Điểm duy nhất của tôi là việc sử dụng ivars một cách cẩu thả và quản lý bộ nhớ thủ công chắc chắn có thể dẫn đến rò rỉ viewDidLoad
. Mọi người nên nhạy cảm với didReceiveMemoryWarning
kịch bản và chương trình phù hợp.
viewDidLoad
mã sẽ bị rò rỉ didReceiveMemoryWarning
. Thở dài.
Nói một cách đơn giản, bạn sẽ muốn tạo bất kỳ điều khiển hoặc mảng nào trong viewDidLoad
đó, cũng như tại viewDidAppear
nơi bạn muốn làm mới các điều khiển hoặc mảng đó.
viewDidLoad
được gọi một lần khi bộ điều khiển được tạo và viewDidAppear
được gọi mỗi khi chế độ xem, tốt, DID xuất hiện. Vì vậy, giả sử bạn có một chế độ xem phương thức mà bạn trình bày, khi chế độ xem đó bị loại bỏ, viewDidAppear
sẽ được gọi, và viewDidLoad
sẽ không được gọi.
viewDidLoad
có thể được gọi nhiều hơn một lần . Nếu chế độ xem của bạn trong khi không được hiển thị (trong một chồng các chế độ xem khác) được dỡ bỏ bởi các phiên bản iOS cũ hơn trong tình trạng bộ nhớ thấp, thì bộ điều khiển chế độ xem sẽ tự động tải lại chế độ xem khi cần hiển thị lại trên màn hình. Trong các phiên bản iOS mới hơn, bạn có thể chọn giúp giảm mức sử dụng bộ nhớ bằng cách thực hiện những gì iOS trước đó đã làm cho bạn: Tải chế độ xem ngoài màn hình khi có didReceiveMemoryWarning
thông báo, trong trường hợp đó, chế độ viewDidLoad
này sẽ được gọi lại.