به نام خدا

شاید تا حالا به این فکر کرده باشید که وقتی دارید یه تیبل ویو با ۱۰۰۰ تا cell میسازید چه اتفاقی برای سیستم عامل و رم میفته.

فکر کنید که قراره یه حلقه بسازید و ۱۰۰۰ بار از یک کلاس بسازید و اضافه کنید به یک آرایه و توی این حلقه مقادیر متفاوتی به متغیر های داخل کلاس بدید تا دیتا های سلول هاتون باهم متفاوت باشند حالا چی میشه یه ارایه با ۱۰۰۰ تا المنت؟ این ۱۰۰۰ تا بشه ۱۰۰۰۰ تا چی؟

خب ای او اس یه فکر بهتری کرده گفته که شما با استفاده از dequeueReusableCell میتونید از این کار غلط پیشگیری کنید!

خب چجوری؟

یک صف رو در نظر بگیرید که اعضا از انتها به اون اضافه میشن و ما از سر صف اعضا رو dequeue میکنیم.

وقتی شما این تابع رو صدا میکنید به این معنیه که میخواید از داخل صف اولین عضوشو بکشید بیرون اما از کدوم صف؟

آی او اس وقتی میخواد یه تیبل ویو رو بچینه ابتدا به اندازه طول تیبل ویو، Cell ها رو میسازه تا پر بشه یعنی ممکنه تیبل ویوی شما ۱۰۰ پوینت باشه و هر سل شما ۱۰ پوینت جا بگیره در اینصورت ۱۱ تا آیتم میسازه که بتونه همزمان نشون بده حالا هر موقع که شما اسکرول میکنید و آیتمی به بالا میره و قابل مشاهده نیست به سرعت، اولین کلاس با مقادیر جدید تغییر میکنه و به قولی Reuse یا بازاستفاده میشه پس الان سلول ۱۲ اُمی شما همون کلاس اول از بین اون ۱۱ کلاسی است که ساخته شده و وقتی اسکرول میکنید به پایین تر کلاس دومتون دیتاشو رو به دیتای سلول ۱۳ اُمی میده

پس اینجوری فقط ۱۱ کلاس رو نگه میداره و هربار که اسکرول میشه دیتای کلاس هایی که از چشم پنهان میشن رو تغییر میده و میزاره جای سلول جدیدی که نمایش داده میشه.

یه نکته ی نه چندان مهم این که شما همیشه از  dequeueReusableCell استفاده میکنید که دوتا پارامتر داره پارامتر اول که اسم reusable هست و دومی indexPath هست

شاید براتون سوال بشه که این indexPath واسه چیه باید بدونید که واسه اینه که داخل تابع نیاز داره تا ارتفاع رو بدونه و با این indexPath میتونه تابع tableView:heightForRowAt index رو صدا بزنه و ارتفاع رو بگیره.

شاد و پیروز باشید

یاعلی مدد