didMoveToParentViewController dan willMoveToParentViewController

Dokumentasi Apple di UIViewController mengatakan:

Jika Anda mengimplementasikan pengontrol tampilan kontainer Anda sendiri, ia harus memanggil metode willMoveToParentViewController: dari pengontrol tampilan anak sebelum memanggil metode removeFromParentViewController, dengan meneruskan nilai induk nihil.

Saat penampung khusus Anda memanggil metode addChildViewController:, maka secara otomatis memanggil metode willMoveToParentViewController: dari pengontrol tampilan untuk ditambahkan sebagai anak sebelum menambahkannya.

Jika Anda mengimplementasikan pengontrol tampilan kontainer Anda sendiri, ia harus memanggil metode didMoveToParentViewController: dari pengontrol tampilan anak setelah transisi ke pengontrol baru selesai atau, jika tidak ada transisi, segera setelah memanggil metode addChildViewController:.

Metode removeFromParentViewController secara otomatis memanggil metode didMoveToParentViewController: dari pengontrol tampilan anak setelah menghapus anak tersebut.

Mengapa saya harus memanggil metode ini? Apa fungsi metode-metode tersebut?

ProfileViewController *profile = [[ProfileViewController alloc] init];
profile.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:profile];
[self.view addSubview:profile.view];
[profile didMoveToParentViewController:self];

Kode saya berfungsi dengan baik meskipun saya menghapus baris terakhir. Dapatkah seseorang tolong bantu saya dalam hal ini?

Terima kasih sebelumnya


person Arun    schedule 20.08.2015    source sumber
comment
Metode-metode ini hanya digunakan untuk beberapa situasi. Setelah/sebelum Anda memindahkan/menghapus viewcontroller ke/dari viewcontroller. Jika hanya menambah/mendorong/menghapus/pop, Anda tidak perlu memanggilnya.   -  person tuledev    schedule 20.08.2015
comment
Menghapus metode tersebut tidak menunjukkan perubahan apa pun. Sama halnya dengan menambahkannya juga   -  person Arun    schedule 20.08.2015
comment
Ya. Itu benar. Metode ini tidak menghasilkan apa-apa. Hanya pemanggilan metode didMoveToParentViewController. Jika Anda tidak menerapkannya, sebut saja -› jangan lakukan apa pun.   -  person tuledev    schedule 20.08.2015
comment
Apakah ia akan melakukan sesuatu untuk manajemen memori?   -  person Arun    schedule 20.08.2015
comment
Bukan. Anda bisa mengabaikannya.   -  person tuledev    schedule 20.08.2015
comment
Jadi, apa gunanya menggunakannya jika tidak ada pengaruhnya, dan bisa diabaikan?   -  person Darius Miliauskas    schedule 01.12.2015


Jawaban (2)


Metode ini digunakan karena merupakan aturan yang harus diikuti saat menambahkan atau menghapus pengontrol tampilan anak. Sebelum menambahkan metode willMoveToParentViewController pengontrol tampilan anak harus dipanggil terlebih dahulu diikuti dengan metode didMoveToParentViewController. Saat menghapus pengontrol tampilan anak dari pengontrol tampilan induk, metode ini dipanggil dalam urutan terbalik.

addChildViewController: secara otomatis memanggil [child willMoveToParentViewController:self]. Jadi seseorang harus menelepon didMoveToParentViewController setelah addChildViewController:. Demikian pula removeFromParentViewController: secara otomatis memanggil [child didMoveToParentViewController:nil]. Jadi seseorang harus menelepon willMoveToParentViewController: sebelum removeFromParentViewController:

person Arun    schedule 24.08.2015

Pada dasarnya, mereka tidak melakukan apa pun yang Anda lihat di antarmuka. "Namun, subkelas apa pun mengizinkannya untuk ditimpa, jadi jika Anda tidak memanggilnya, Anda tidak akan merusak UIViewController yang kosong, tetapi Anda akan merusak subkelas yang mengandalkannya (misalnya: katakanlah subkelas ingin melepaskan sebuah objek ketika dihapus dari pengontrol tampilan induk, jika Anda tidak memanggil metode tersebut, maka objek tidak akan pernah dilepaskan)." seperti yang dijelaskan di komentar di sini.

person Darius Miliauskas    schedule 01.12.2015