Middle
Чӣ гуна нигоҳдории тамошоҳо, ки навъи ишора мебошанд?
sobes.tech AI
Ҷавоб аз AI
ویوها (UIView و زیرکلاسهای آن) در iOS کلاس هستند، بنابراین نوع ارجاعی دارند. ذخیره ارجاعات به آنها با استفاده از مکانیزمهای زیر انجام میشود:
-
ارجاعات قوی (Strong References):
- به طور پیشفرض، اگر ویژگی برای UIView بدون مشخصکننده
weakیاunownedاعلام کنید، این یک ارجاع قوی ایجاد میکند. - ارجاع قوی شمارنده ارجاعهای شیء را افزایش میدهد. شیء تا زمانی که حداقل یک ارجاع قوی به آن وجود داشته باشد، از حافظه حذف نخواهد شد.
- این روش استاندارد برای نگهداری ویوها است، زمانی که نیاز است در حافظه باقی بمانند و در دسترس باشند.
//ارجاع قوی var myView: UIView = UIView() - به طور پیشفرض، اگر ویژگی برای UIView بدون مشخصکننده
-
ارجاعات ضعیف (Weak References):
- با استفاده از کلمه کلیدی
weakاعلام میشوند. - ارجاع ضعیف تعداد ارجاعات شیء را افزایش نمیدهد.
- ارجاعات ضعیف از حذف شیء از حافظه جلوگیری نمیکنند، اگر ارجاعات قوی به آن باقی نمانده باشد.
- برای جلوگیری از حلقههای ارجاع قوی استفاده میشود، وضعیت معمول رابطه والد-فرزند است، جایی که والد ارجاع قوی به فرزند دارد، و فرزند ممکن است ارجاعی به والد داشته باشد. در این حالت، ارجاع بازگشتی به والد باید ضعیف باشد.
- ارجاعات ضعیف باید اختیاری (
Optional) باشند، چون ممکن است شیء حذف شود و ارجاع به آنnilشود.
weak var parentView: UIView? - با استفاده از کلمه کلیدی
-
ارجاعات بدون مالک (Unowned References):
- با استفاده از کلمه کلیدی
unownedاعلام میشوند. - همانند ارجاعات ضعیف، شمارنده ارجاع را افزایش نمیدهند.
- تفاوت: بر خلاف ارجاعات ضعیف، ارجاعات بدون مالک اختیاری نیستند. فرض بر این است که شیء حداقل تا زمانی که ارجاع به آن وجود دارد، زنده است. اگر پس از آزادسازی شیء، به آن از طریق ارجاع بدون مالک دسترسی پیدا کنید، برنامه کرش میکند.
- زمانی استفاده میشود که مطمئن باشید چرخه عمر ارجاع، از چرخه عمر شیء که به آن اشاره دارد، تجاوز نمیکند. در زمینه ویوها، این کمتر رایج است نسبت به
weak.
//کمتر رایج برای ویوها، اما ممکن است unowned var childView: UIView - با استفاده از کلمه کلیدی
-
آرایهها و مجموعهها:
- نگهداری ارجاعات به ویوها در آرایهها (
Array)، دیکشنریها (Dictionary) یا مجموعهها (Set) نیز به طور پیشفرض، ارجاعات قوی به عناصر مجموعه ایجاد میکند.
var subviews: [UIView] = [] - نگهداری ارجاعات به ویوها در آرایهها (
انتخاب بین ارجاع قوی، ضعیف یا بدون مالک، بستگی به سناریوی خاص استفاده و مدیریت چرخه عمر اشیاء دارد تا از نشت حافظه جلوگیری شود. در SwiftUI، مفاهیم مدیریت چرخه عمر ویوها کمی متفاوت است، اما در زمینه UIKit، این مکانیزمها همچنان روش اصلی نگهداری ارجاعات هستند.