چرا باید حافظه کمتری استفاده بشه؟ وقتی میخواهیم حافظه را کاهش دهیم درواقع درمورد درپای حافظه خود صحبت می کنیم.
راحت ترین پاسخی که میشه به این سوال داد اینه که کاربران تجربه بهتری دارند وقتی از اپلیکیشن ما استفاده میکنند. نه تنها برنامه شما سریع تر راه اندازی میشود ، سیستم عملکرد بهتری نیز خواهد داشت . برنامه شما مدت بیشتری در حافظه باقی میماند. سایر برنامه ها مدت بیشتری در حافظه خواهند ماند. تقریبا همه چیز بهتر خواهد بود.
حافظه صفحاتی به شما خواهد داد که میتوانید چندین شی را به صورت پشته در آن نگه داری کنید ، برخی اشیاء میتوانند چندین صفحه را پوشش دهند، هر صفحه معمولا 16 کیلو بایت است و میتواند تمیز یا کثیف باشد.
استفاده از حافظه برنامه در واقع تعداد صفحات ضرب در اندازه صفحه است.
یک مثال خوب برای این میتواند JPEG باید اگر یک فایل JPEG داشته باشیم که 50 کیلوبایت است ، زمانی که حافظه به آن اختصاص داده میشود , 4 صفحه به آن اختصاص داده میشود که درواقع کاملا پر نیستند و میتوانند برای موارد دیگر نیز استفاده شوند.
آی او اس یک سیستم تعویض دیسک سنتی ندارد، در عوض ، از یک کمپرسور حافظه که در iOS 7 معرفی شد استفاده میکند
اپل
وقتی من یک dictionary دارم که برای caching استفاده میکنم درحال حاضر از 5 صفحه استفاده میکنم اما اگر بعد از مدتی از آن استفاده نکنم و سیستم به فضایی نیاز داشته باشد، کمپرسور صفحه را فشرده میکند و تبدیل به یک صفحه میکند و در این صورت من 4 صفحه صرفه جویی کردن و میتونم چیز های دیگه ای در آن ذخیره کنم.
ما نباید بیش از حد cache کنیم ما با cache کردنمون به CPU کمک میکنیم تا اون رو از انجام کار های مکرر نجات بدیم ولی زمانی که بیش از حد cache میکنیم تمام حافظه خود را مصرف میکنیم و این میتواند برای سیستم مشکل ایجاد کند.
به خاطر داشته باشید که بسته به دستگاه، محدودیت شما تغییر خواهد کرد. بنابراین نمیتوانید در دستگاههای 1 گیگابایتی به اندازه یک دستگاه 4 گیگابایتی از حافظه استفاده کنید.
اپل
مهمترین چیزی که در مورد تصاویر باید به خاطر بسپارید این است که استفاده از حافظه به ابعاد تصویر مربوط می شود نه اندازه فایل آن.
مثال:
وقتی من یک تصویر با طول 2048 و عرض 1536 و حجم 590 کیلو بایت دارم این به این معنا نیست که 590 کیلو بایت در حافظه جای میگیرد، ولی واقعا چقدر جا میگیرد؟ 10 مگابایت ، اره واقعا 10 مگابایت خیلی زیاده. ولی چه جوری حساب میشه؟
2048 pixels x 1536 pixels x 4 bytes per pixel
به سه صورت Load , Decode , Render
لود: فایل 590 کیلوبایتی JPEG را که فشرده شده است، در حافظه بارگذاری می کند.
دیکود: آن فایل JPEG را به فرمتی تبدیل می کند که GPU بتواند بخواند. حالا این باید فشرده نشود که 10 مگابایت می شود.
رندر: نمایش تصویر در نمایشگر
اکنون 4 بایت در هر پیکسل با فرمت SRGB دریافت کردیم. این معمولا رایج ترین فرمتی است که تصاویر در گرافیک هستند. این 4 بیت در هر پیکسل است، بنابراین شما 1 بایت برای قرمز، 1 بایت برای سبز، 1 بایت برای آبی، و یک جزء آلفا دارید.
UIImage :
ImageIO:
حافظه یک منبع محدود و مشترک است
استفاده از حافظه را هنگام اجرا از Xcode نظارت کنید
اجازه دهید iOS فرمت های تصویر شما را انتخاب کند
از ImageIO برای نمونه برداری از تصاویر استفاده کنید
منابع بزرگی را که خارج از صفحه هستند، بارگیری کنید
از نمودارهای حافظه برای درک بیشتر و کاهش ردپای حافظه استفاده کنید
منبع: کنفرانس WWDC اپل