توابع مدیریت حافظه و عملکرد آن در زبان Swift 4 از طریق شمارش مرجع خودکار (ARC) انجام می شود. از ARC برای مقدار دهی اولیه و حذف مقدار دهی اولیه منابع سیستم استفاده می شود در نتیجه فضای حافظه مورد استفاده در نمونه‌های کلاس استفاده می‌شود زمانی که نمونه‌ها دیگر، مورد نیاز نیستند. ARC اطلاعات مربوط به روابط بین نمونه های کد را برای مدیریت مؤثر منابع حافظه ردیابی می کند.

عملکرد ARC

  • ARC هر زمان که نمونه کلاس جدیدی توسط ()init ایجاد شود بخشی از حافظه را برای ذخیره اطلاعات به آن اختصاص می دهد.
  • اطلاعات مربوط به نوع نمونه و مقادیر آن در حافظه ذخیره می شوند.
  • هنگامی که دیگر به نمونه کلاس احتیاجی نباشد، به طور خودکار فضای حافظه را با استفاده از ()deinit برای ذخیره سازی بیشتر و بازیابی نمونه کلاس آزاد می کند.
  • ARC ویژگی های نمونه کلاس موجود، ثابت ها و متغیرها را ردیابی کرده به طوری که ()deinit تنها برای موارد استفاده نشده اعمال می شود.
  • ARC یک “مرجع قوی” برای آن دسته از ویژگی های نمونه کلاس، ثابت ها و متغیرها است که برای محدود کردن جابجایی نمونه کلاس های اجرایی استفاده می شود.

برنامه ARC

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

نمونه های کلاس چرخه مرجع قوی ARC

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

نکته:

زبان برنامه نویسی سوئیفت از شمارش مرجع اتوماتیک (ARC) برای مدیریت حافظه استفاده می کند. Apple  در گذشته نیاز به مدیریت حافظه دستی در Objective C داشت، اما ARC را در سال ۲۰۱۱ معرفی کرد که اجازه تخصیص و آزادسازی راحت تر حافظه را می دهد.

مراجع ناشناخته و ضعیف ARC

یکی از مشکلات ARC، احتمال ایجاد یک چرخه مرجع قوی است که نمونه های دو کلاس مختلف هر کدام به دیگری ارجاع دارند که باعث می شود در حافظه نشت کنند، زیرا هرگز آزاد نمی شوند. زبان برنامه نویسی سوئیفت کلمات کلیدی  weak و unowned را برای حل چرخه های مرجع قوی فراهم کرده است:

  • مراجع ضعیف(Weak)
  • مراجع ناشناخته(Unowned)

از این منابع برای ارجاع موارد دیگر در یک چرخه مرجع توسط یک نمونه استفاده می شود. سپس ممکن است این موارد به جای اهمیت دادن به چرخه مرجع قوی، به هر یک از نمونه ها مراجعه کنند. هنگامی که کاربر بداند برخی از نمونه ها ممکن است مقادیر “nil” را برگردانند(مرجع های weak باید متغیرهای اختیاری باشند، زیرا می توانند تغییر کنند و nil شوند)، آن را با مرجع Weak و هنگامی که نمونه مقداری غیر از nil برگرداند، آن را با مرجع Unowned اعلام می کند.

برنامه مرجع ضعیف

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

برنامه مرجع ناشناس

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

چرخه های مرجع قوی برای Closures

هنگامی که ما یک closure  را به ویژگی نمونه کلاس و بدنه Closure اختصاص دهیم می توانیم یک چرخه مرجع قوی نمونه دریافت کنیم. نمونه قوی برای closure توسط “self.someProperty”یا “()self.someMethod” تعریف می شود. چرخه های مرجع قوی به عنوان انواع مرجع برای closure استفاده می شوند.

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

منابع ضعیف و ناشناخته

هنگامی که Closure و نمونه به یکدیگر رجوع شوند، کاربر ممکن است capture در یک Closure را به عنوان یک مرجع unowned تعریف کند که به کاربر اجازه نمی دهد نمونه را به طور همزمان تفکیک کند. هنگامی که مقدار بازگشتی یک نمونه “nil” نشان داده شود، Closure به عنوان یک نمونه weak تعریف می شود.

عیب یابی و عناصر دیگر

هنگامی که برنامه فوق را با استفاده از playground اجرا کنیم نتیجه زیر را می گیریم:

کلیدواژه ها :

این خبر را به اشتراک بگذارید :