Untuk memperjelas tujuan pertanyaan ini: Saya tahu BAGAIMANA membuat tampilan rumit dengan kedua subview dan menggunakan drawRect. Saya mencoba untuk sepenuhnya memahami kapan dan mengapa harus menggunakan satu di atas yang lain.
Saya juga mengerti bahwa tidak masuk akal untuk mengoptimalkan sebanyak itu sebelumnya, dan melakukan sesuatu dengan cara yang lebih sulit sebelum melakukan profil. Anggaplah saya nyaman dengan kedua metode ini, dan sekarang benar-benar menginginkan pemahaman yang lebih dalam.
Banyak kebingungan saya berasal dari belajar cara membuat tampilan gulir tampilan tabel benar-benar halus dan cepat. Tentu saja sumber asli dari metode ini adalah dari penulis di balik twitter untuk iPhone (sebelumnya tweetie). Pada dasarnya ia mengatakan bahwa untuk membuat tabel bergulir buttery halus, rahasianya adalah TIDAK menggunakan subview, tetapi melakukan semua gambar dalam satu tampilan kustom. Pada dasarnya tampaknya menggunakan banyak subview memperlambat rendering turun karena mereka memiliki banyak overhead, dan terus-menerus disusun ulang atas pandangan orang tua mereka.
Agar adil, ini ditulis ketika 3GS cukup baru, dan iDevices telah menjadi jauh lebih cepat sejak itu. Tetap metode ini secara teratur disarankan pada jalinan dan di tempat lain untuk tabel kinerja tinggi. Sebenarnya itu adalah metode yang disarankan dalam Tabel Contoh Kode Apple , telah disarankan dalam beberapa video WWDC ( Gambar Praktis untuk Pengembang iOS ), dan banyak buku pemrograman iOS .
Bahkan ada alat yang tampak luar biasa untuk merancang grafis dan menghasilkan kode Core Graphics untuk mereka.
Jadi pada awalnya saya percaya bahwa "ada alasan mengapa Core Graphics ada. Ini CEPAT!"
Tetapi segera setelah saya pikir saya mendapatkan ide "Mendukung Core Graphics bila memungkinkan", saya mulai melihat bahwa drawRect sering bertanggung jawab atas respons yang buruk dalam suatu aplikasi, adalah ingatan yang sangat mahal, dan benar-benar membebani CPU. Pada dasarnya, saya harus " Menghindari override drawRect " ( Kinerja Aplikasi iOS WWDC 2012 : Grafik dan Animasi )
Jadi saya kira, seperti semuanya, ini rumit. Mungkin Anda bisa membantu diri sendiri dan orang lain memahami When and Why's untuk menggunakan drawRect?
Saya melihat beberapa situasi yang jelas untuk menggunakan Core Graphics:
- Anda memiliki data dinamis (contoh Bagan Saham Apple)
- Anda memiliki elemen UI yang fleksibel yang tidak dapat dieksekusi dengan gambar resizable sederhana
- Anda membuat grafik dinamis, yang pernah dirender digunakan di banyak tempat
Saya melihat situasi untuk menghindari Core Graphics:
- Properti tampilan Anda perlu dianimasikan secara terpisah
- Anda memiliki hierarki tampilan yang relatif kecil, sehingga setiap upaya ekstra yang dirasakan menggunakan CG tidak sebanding dengan keuntungannya
- Anda ingin memperbarui potongan tampilan tanpa menggambar ulang semuanya
- Tata letak subview Anda perlu diperbarui ketika ukuran tampilan induk berubah
Jadi berikan pengetahuan Anda. Dalam situasi apa Anda meraih drawRect / Core Graphics (yang juga bisa dicapai dengan subview)? Faktor-faktor apa yang mengarahkan Anda ke keputusan itu? Bagaimana / Mengapa menggambar dalam satu tampilan kustom disarankan untuk menggulirkan sel tabel halus buttery, namun Apple menyarankan drawRect untuk alasan kinerja secara umum? Bagaimana dengan gambar latar belakang sederhana (kapan Anda membuatnya dengan CG vs menggunakan gambar png yang dapat diubah ukurannya)?
Pemahaman mendalam tentang hal ini mungkin tidak diperlukan untuk membuat aplikasi yang bermanfaat, tetapi saya tidak suka memilih di antara teknik-teknik tanpa bisa menjelaskan alasannya. Otak saya marah pada saya.
Pembaruan Pertanyaan
Terima kasih atas informasinya semua orang. Beberapa pertanyaan klarifikasi di sini:
- Jika Anda menggambar sesuatu dengan grafis inti, tetapi dapat melakukan hal yang sama dengan UIImageViews dan png yang dirender sebelumnya, haruskah Anda selalu menempuh rute itu?
- Pertanyaan serupa: Terutama dengan alat badass seperti ini , kapan Anda harus mempertimbangkan menggambar elemen antarmuka dalam grafis inti? (Mungkin ketika tampilan elemen Anda variabel. Mis. Tombol dengan 20 variasi warna berbeda. Ada kasus lain?)
- Berdasarkan pemahaman saya dalam jawaban saya di bawah ini, dapatkah kinerja yang sama diperoleh untuk sel tabel mungkin diperoleh dengan secara efektif menangkap bitmap snapshot sel Anda setelah UIView membuat render Anda sendiri, dan menampilkannya sambil menggulir dan menyembunyikan tampilan kompleks Anda? Jelas beberapa potong harus dikerjakan. Hanya pemikiran menarik yang saya miliki.