<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های narjes abbaspour</title><link>https://virgool.ir/feed/@anna.shiningdiamond</link><description></description><language>fa</language><pubDate>2026-11-11 15:58:42</pubDate><image><url>https://files.virgool.ir/upload/users/32871/avatar/VGb7B5.png</url><title>narjes abbaspour</title><link>https://virgool.ir/@anna.shiningdiamond</link></image><item><title>ارتباط مصرف بالای حافظه با RxSwift</title><link>https://virgool.ir/@anna.shiningdiamond/ارتباط-مصرف-بالای-حافظه-با-rxswift-dra6nrmux0d5</link><description>بسیاری از ما برنامه نویسان برای بالا بردن کیفیت و سرعت برنامه از RxSwift استفاده میکنیم، ولی گاهی اوقات بدون اینکه متوجه بشیم مصرف حافظه ما به صورت خطرناکی بالا میره و ما متوجه نمیشم!حتما از خودتون میپرسید چرا؟ و چطور؟، ما که زمان اجرا و در تست برنامه مشکلی ندیدیم..بله، این مشکل احتمالی به صورت خیلی نامحسوس هست و با تکرار فرایند های برنامه، شما ناگهان با کرش برنامه مواجه میشید و اکثر برنامه نویسان متاسفانه نسبت به متد” func didReceiveMemoryWarning()” خود اپل بی تفاوت هستن که اصولا قبل از کرش و رسیدن حافظه به سطح خطرناک صدا زده میشه.نقش RxSwift :اگر بخواهیم یک پاسخ کوتاه و صریح بدیم، باید بگیم RetainCycle علت این مشکل هست. در rxswift ما برای اتصالات خود از موارد disposable استفاده میکنیم که بعد از اینکه کارمون با اون ها تمام شد باید dispose بشن و از بین برن. نکته مهم اینجاست که dispose شدن disposebag وابسته به کلاسی هست که در اون تعریف شده، به تعریفی دیگه طول عمر موارد disposeable ما به صورت زیر هست.حال اگر ما از self که viewController ما هست با رفرتس strong در bind و subscribe ها استفاده کرده باشیم یک حلقه بی نهایت بوجود میاد و هیچوقت viewController ما و disposeable هامون از بین نمیرن و هر بار با خروج ما در حافظه باقی میمونن و با هر بار ورود ما به اون صفحه دوباره ساخته میشن و این روند تا جایی ادامه پیدا میکنه تا حافظه به محدودیت خودش برسه و کرش!به این حلقه بی پایان retainCycle گفته میشه.راه حل:۱- در تمام فانکشن های RxSwift در صورت نیاز استفاده از self از اون به صورت weak و unowned (توصیه نمیشه) استفاده بشه و یا به شی درون self مستقیما اشاره بشه بدون نام بردن self، به این صورت به صورت طبیعی و بدون وابستگی به راحتی deinit میشه و dispose صدا زده میشه. ۲- از disposebag استفاده نکنید و اصطلاحا به روش دستی dispose رو خودتون برای هر binding و subscribtion صدا بزنید که اصلا توصیه نمیکنم.مثال صحیح:تست سالم بودن هر صفحه:۱- از قسمت debug gauges خود Xcode استفاده کنید.نمودار حافظه درزمان باز کردن قسمت جدید به سمت بالا و هنگام بستن به سمت پایین حرکت میکند.نکته:معمولا نمودار در هنگام خروج با اختلاف کم به جای عدد قبل برمیگرده، مگر اینکه اطلاعات عکس و فیلم و نقشه cache کرده باشید که در deinit میتونید پاکشون کنید.۲- در فانکشن deinit از breakpoint استفاده کنید و مطمعن بشید صدا زده میشه.</description><category>narjes abbaspour</category><author>narjes abbaspour</author><pubDate>Thu, 21 Feb 2019 14:18:16 +0330</pubDate></item></channel></rss>