<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهدی ساعدی</title>
        <link>https://virgool.io/feed/@MattSaedi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 12:50:49</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1451805/avatar/8kDsJJ.png?height=120&amp;width=120</url>
            <title>مهدی ساعدی</title>
            <link>https://virgool.io/@MattSaedi</link>
        </image>

                    <item>
                <title>تخصیص حافظه در iOS</title>
                <link>https://virgool.io/@MattSaedi/%D8%AA%D8%AE%D8%B5%DB%8C%D8%B5-%D8%AD%D8%A7%D9%81%D8%B8%D9%87-%D8%AF%D8%B1-ios-jv4inieajrhd</link>
                <description>کاهش حافظهچرا باید حافظه کمتری استفاده بشه؟ وقتی میخواهیم حافظه را کاهش دهیم درواقع درمورد درپای حافظه خود صحبت می کنیم.چرا استفاده از حافظه را کاهش دهیم؟راحت ترین پاسخی که میشه به این سوال داد اینه که کاربران تجربه بهتری دارند وقتی از اپلیکیشن ما استفاده میکنند. نه تنها برنامه شما سریع تر راه اندازی میشود ، سیستم عملکرد بهتری نیز خواهد داشت . برنامه شما مدت بیشتری در حافظه باقی میماند. سایر برنامه ها مدت بیشتری در حافظه خواهند ماند. تقریبا همه چیز بهتر خواهد بود.صفحات تمیز و کثیفحافظه صفحاتی به شما خواهد داد که میتوانید چندین شی را به صورت پشته در آن نگه داری کنید ، برخی اشیاء میتوانند چندین صفحه را پوشش دهند، هر صفحه معمولا 16 کیلو بایت است و میتواند تمیز یا کثیف باشد.استفاده از حافظه برنامه در واقع تعداد صفحات ضرب در اندازه صفحه است.مثال:یک مثال خوب برای این میتواند JPEG باید اگر یک فایل JPEG داشته باشیم که  50 کیلوبایت است ، زمانی که حافظه به آن اختصاص داده میشود , 4 صفحه به آن اختصاص داده میشود که درواقع کاملا پر نیستند و میتوانند برای موارد دیگر نیز استفاده شوند.کمپرسور حافظهآی او اس یک سیستم تعویض دیسک سنتی ندارد، در عوض ، از یک کمپرسور حافظه که در iOS 7 معرفی شد استفاده میکنداپلوقتی من یک dictionary دارم که برای caching استفاده میکنم درحال حاضر از 5 صفحه استفاده میکنم اما اگر بعد از مدتی از آن استفاده نکنم و سیستم به فضایی نیاز داشته باشد، کمپرسور صفحه را فشرده میکند و تبدیل به یک صفحه میکند و در این صورت من 4 صفحه صرفه جویی کردن و میتونم چیز های دیگه ای در آن ذخیره کنم.ما نباید بیش از حد cache کنیم ما با cache کردنمون به CPU کمک میکنیم تا اون رو از انجام کار های مکرر نجات بدیم ولی زمانی که بیش از حد cache میکنیم تمام حافظه خود را مصرف میکنیم و این میتواند برای سیستم مشکل ایجاد کند.به خاطر داشته باشید که بسته به دستگاه، محدودیت شما تغییر خواهد کرد. بنابراین نمی‌توانید در دستگاه‌های 1 گیگابایتی به اندازه یک دستگاه 4 گیگابایتی از حافظه استفاده کنید.اپلعکس هامهمترین چیزی که در مورد تصاویر باید به خاطر بسپارید این است که استفاده از حافظه به ابعاد تصویر مربوط می شود نه اندازه فایل آن.مثال:2048 x 1536وقتی من یک تصویر با طول 2048 و عرض 1536 و حجم 590 کیلو بایت دارم این به این معنا نیست که 590 کیلو بایت در حافظه جای میگیرد، ولی واقعا چقدر جا میگیرد؟ 10 مگابایت ، اره واقعا 10 مگابایت خیلی زیاده. ولی چه جوری حساب میشه؟2048 pixels x 1536 pixels x 4 bytes per pixelتصاویر در iOS چگونه کار می کنند؟به سه صورت Load , Decode , Renderلود:  فایل 590 کیلوبایتی JPEG را که فشرده شده است، در حافظه بارگذاری می کند.دیکود: آن فایل JPEG را به فرمتی تبدیل می کند که GPU بتواند بخواند. حالا این باید فشرده نشود که 10 مگابایت می شود.رندر: نمایش تصویر در نمایشگرچرا باید طول ضرب در عرض ضرب در چهار بشه؟SRGB: (Standard Red Green Blue)اکنون 4 بایت در هر پیکسل با فرمت SRGB دریافت کردیم. این معمولا رایج ترین فرمتی است که تصاویر در گرافیک هستند. این 4 بیت در هر پیکسل است، بنابراین شما 1 بایت برای قرمز، 1 بایت برای سبز، 1 بایت برای آبی، و یک جزء آلفا دارید.مقایسه UIImage و ImageIOUIImage : برای اندازه و تغییر اندازه گران استتصویر اصلی را در حافظه از حالت فشرده خارج می کندتبدیل فضای مختصات داخلی گران استImageIO:   اندازه تصویر و اطلاعات فراداده را بدون کثیف کردن حافظه بخواند  اندازه تصاویر را فقط با هزینه تغییر اندازه تصویر تغییر دهدخلاصهحافظه یک منبع محدود و مشترک استاستفاده از حافظه را هنگام اجرا از Xcode نظارت کنیداجازه دهید iOS فرمت های تصویر شما را انتخاب کنداز ImageIO برای نمونه برداری از تصاویر استفاده کنیدمنابع بزرگی را که خارج از صفحه هستند، بارگیری کنیداز نمودارهای حافظه برای درک بیشتر و کاهش ردپای حافظه استفاده کنیدمنبع: کنفرانس WWDC اپل</description>
                <category>مهدی ساعدی</category>
                <author>مهدی ساعدی</author>
                <pubDate>Wed, 29 Jun 2022 12:19:53 +0430</pubDate>
            </item>
                    <item>
                <title>شیرجه عمیق تو دیزاین پترن</title>
                <link>https://virgool.io/@MattSaedi/%D8%B4%DB%8C%D8%B1%D8%AC%D9%87-%D8%B9%D9%85%DB%8C%D9%82-%D8%AA%D9%88-%D8%AF%DB%8C%D8%B2%D8%A7%DB%8C%D9%86-%D9%BE%D8%B1%D8%AA%D9%86-rhoow1t4lq9o</link>
                <description>اولین سوالی که احتمال ذهنمونو درگیر کرده اینه که ...دیزاین پترن چیست؟دیزاین پترن ها راه حلی برای مشکلات کلی هستند که توسعه دهندگان در طول توسعه نرم افزار با انها مواجه بودند. این راه حل ها با ازمون و خطا توسط توسعه دهندگان متعددی تو یک دوره زمانی قابل توجه ای بدست آمد.دیزاین پترن یه تیکه کد خاصی نیست، بلکه مفهوم کلی برای حل یک مشکل خاص است، ما میتونیم جزئیات دیزاین پترن رو پیاده سازی کنیم یا راه حلی متناسب با برنامه خودمون پیاده سازی کنیم.دیزاین پترن ها الگوریتم نیستند!دیزاین پترن ها معمولا با الگوریتم ها اشتباه گرفته میشن. چون هر دو مفهوم راه حل های معمولی برای برخی مشکلات شناخته را توصیف میکنن.در حالی که یک الگوریتم همیشه مجموعه‌ای واضح از اقدامات را تعریف می‌کند که می‌تواند به هدفی دست یابد، یک دیزاین پترن توصیف سطح بالایی از یک راه‌حل است. کد یک دیزاین پترن اعمال شده برای دو برنامه مختلف ممکن است متفاوت باشد.بزارید با یه مثال بگم.الگوریتم مثل دستور پخته: هر دو دارای مراحل روشنی برای رسیدن به یک هدف هستند. از طرف دیگه دیزاین پترن شبیه یک طرح اولیه است: شما می توانید ببینید که نتیجه و ویژگی های آن چیست، اما ترتیب دقیق اجرای آن به شما بستگی دارد.دیزاین پترن از چه چیزی تشکیل شده است؟بیشتر دیزاین پترن ها خیلی رسمی توصیف شدن. بنابراین میتونید اونها رو در بسیاری از موارد بازنویسی کنید. دیزاین پترن ها فقط یه الگو برای حل مشکلات ههستند که میتونید دو یا چند الگورو با هم ادغام کنید تا مشکل خودتون رو حل کنید.چرا باید دیزاین پترن ها رو یاد بگیریم؟بایدی در کار نیست میتونید چند سال برنامه نویس باشید حتی یک دیزاین پترن رو بلد نباشید. خیلیا حتی از یه سری دیزاین پترن ها استفاده میکنند که حتی اسمشو نمیدونن ولی پس چرا باید واسه یادگیری اونا وقت صرف کنیم؟دیزاین پترن ها یه زبان مشترک رو تعریف میکنند که شما و هم تیمی هایتان می توانید از ان برای برقراری ارتباط موثر تر استفاده کنید. میتوانید بگید: «اوه، فقط از یک Singleton برای آن استفاده کن» و همه ایده پشت پیشنهاد شما را درک خواهند کرد. اگر دیزاین پترن و نام آن را بدانید نیازی به توضیح نیست که singleton چیست.دیزاین پترن ها مجموعه ابزاری از راه حل های آزموده شده برای مشکلات رایج در برنامه نویسی هستند. حتی اگر هرگز با این مشکلات روبرو نشوید، دانستن دیزاین پترن ها همچنان مفید است زیرا به شما می آموزد که چگونه با استفاده از اصول طراحی شی گرا، انواع مشکلات را حل کنیداینو یادت باشه: میتونی یه دایره بدون استفاده از پرگار بکشی ، برنامه نویسی ام دقیقا همینه میتونی بدون بلد بودن دیزاین پترن ها برنامه نویس بشی ولی میتونی با دیزاین پترن ها یه برنامه نویس اصولی بشی و به کمتر مشکلی بخوری.چند تا دیزاین پترن داریم؟ما 23 تا دیزاین پترن داریم به نام های:Factory MethodAbstract FactoryBuilderPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxyIteratorMediatorMementoObserverStateStrategyTemplate MethodVisitorChain of ResponsibilityCommandInterpreterمرجع: کتاب Dive Into Design Pattern</description>
                <category>مهدی ساعدی</category>
                <author>مهدی ساعدی</author>
                <pubDate>Sun, 08 May 2022 12:09:30 +0430</pubDate>
            </item>
                    <item>
                <title>UML Diagram (Sequence Diagram)</title>
                <link>https://virgool.io/@MattSaedi/uml-diagram-sequence-diagram-sogubsbpsgt5</link>
                <description>نمودار توالی یا Sequence Diagram و میخوام اول به نقل از ویکی پدیا شرح بدم:نمودار توالی (به انگلیسی: Sequence Diagram) یکی از نمودارهای زبان مدل‌سازی یکپارچه است که روندی در یک پروژه را مرحله به مرحله نشان می‌دهد. این نمودار زمانی مفید است که بخواهید روند منطقی یک سناریو را به نمایش بگذارید.حالا روند یک برنامه چیه؟از زمانی که برنامه شروع میشه تا پایانش روند یک برنامه اس حالا ما میخوام روند یک فیچرمون رو تو سکونس دیاگرام بیاریم اونم میشه همه ی روند ها رو میتونیم بیاریم ببینید چقدر خوبه!لایف تایم | Life Time | طول عمرتو این تصویر میبینیم که لایف تایم به مدت اجرا یک صفحه گفته میشه. مثلا لایف تایم window : UI از مستطیل بالا شروع میشه تا X پاییناکتیویشن | Activation | فعالمستطیل های بلندی که روی خط چین ها هست زمان فعال بودن این صفحه رو نشون میدن استاپد | Stopped | پایان یافتهضربدر پایین رو ببینید اون به این معنیه که دیگه طول عمر Window : UI تموم شده.بعد از ارتباط  window : UI با aChain : HotelChain میتونیم یه مسیج هم بنویسیم ، حتی میتونیم ننویسیم ولی اینو همیشه بدونید توضیحات همیشه خوب و مورد استفاده قرار میگیره.میخوام با یه مثال بهتون کامل سکونس دیاگرام رو توضیح بدماین مثال رو ببینید ویندو قبل از Main  باز میشه و ما روی ChargePhone میزنیم IPG باز میشه و بعد از پرداخت موفق Success باز میشه وقتی که Success باز میشه در اصل IPG کلا نابود میشه. و بعد از اینکه Success باز شد به Main برمیگرده و وقتی به Main برمیگرده تمام صفحه های قبل کلا بسته میشه  و وارد Main میشه.تو پرانتز مهمقبل از خوندن این مبحث باید مبحث کلاس دیاگرام رو خونده باشید، تمامی اتصالاتی که در کلاس دیاگرام وجود داره در سکونس دیاگرام هم وجود داره</description>
                <category>مهدی ساعدی</category>
                <author>مهدی ساعدی</author>
                <pubDate>Wed, 23 Feb 2022 12:19:27 +0330</pubDate>
            </item>
                    <item>
                <title>UML Diagram (Class Diagram)</title>
                <link>https://virgool.io/@MattSaedi/uml-diagram-class-diagram-hcqzbsepofd0</link>
                <description>بعد از خوندن UML Diagram بود که فهمیدم میشه چقدر اهمیت داشته باشه، شاید خیلی از ماها تو خیلی از کتابا وقتی میدیدم میگفتیم میفهمیم چیه و اصلا راجبش تحقیق نمیکردیم که بخوایم دیپ یاد بگیریم، به پیشنهاد یکی از همکارا رفتم ببینم UML Diagram اصلا چی هست؟UML چیست؟تو لغت UML مخفف (unified modeling language) ، اصلا این یعنی چی؟تو لغت unified modeling language به معنی زبان مدل سازی یکپارچه اس. هدف UML ارائه یک نماد استاندارد است که میتوانیم توسط تمام روش های شی گرا استفاده کنیم.UML انواع مختلفی داره یه تو این مقاله بهشون میپردازیم.کلاس دیاگرام (Class Diagram)فک کنم یکی از چیزایی که خیلی دیده باشید کلاس دیاگرام باشه.قبل از اینکه بخوایم بگیم کلاس دیاگرام چیه بیاید یه مروری کنیم که کلاس چی هست؟ یادتون باشه کلاس یه قالب برای ساخت یک شی است. برگردیم به دیاگرامموناسم کلاسمون همیشه بالای مستطیل کلاسمون میاد.توی قسمت بعدی ام ویژگی های کلاسمون میاد، نوع (Type) ویژگی هم باید مشخص باشه.اخرین چیزی ام که تو هر کلاسمون میمونه متد های کلاسه، نوع چیزی که میخواد خروجی بده باید بعد از دو نقطه نوشته بشه.تو پرانتز و مهمدقت کنید بالا کنار اتریبیوت ها و متد ها یه سری + و - هستش حالا اینا چیه؟+ : یعنی پابلیک یا عمومی یا Public یعنی این متد یا اتریبیوت یه چیز پابلیکه.- : یعنی پرایوت یا خصوصی یا Private یعنی این متد یا اتریبیوت یه چیز پرایوته.# : یعنی پروتکتد یا حفاظت شده یا protected یعنی این متد یا اتریبیوت یه چیز حفاظت شده اس.~ : یعنی پیج لوکال.برای اتصال دو کلا به هم باید از یکی از ای خط ها یا خط چین ها استفاده کنیم.Associationیعنی چی؟ Association در لغت به معنی اتصاله برای اتصال دو کلاس به هم از این استفاده میکنیم.یه سوال شاید واستون پیش بیاد که فقط برای اتصال کلاس ها باید از این استفاده کرد؟ در جواب باید بگم نه یه سوالی که برای خودمم پیش اومده بود و خیلی سعی کردم پیداش کنم این بود که من یه Enumeration رو بخوام به یه کلاس متصل کنم باید با کدوم از اینا انجام بدم بعد از گشتن سال ها و ماه ها (کلا نیم روز شد) فهمیدم میتونم با همین خط صاف اتصال بدم.Inheritanceیعنی چی؟ Inheritance در لغت باز به معنی وراثته ، اولین چیزی که بعد از معنیش به ذهنتون میاد چیه؟ افرین ارث بری ، وقتی یه کلاس از یه کلاس دیگه ارث  میبره از این این نوع خط استفاده میکنیم یه خط صاف که سرش یه مثلث تو خالیه.Realizationیعنی چی؟ Realization  در لغت به معنی تحقق ا که من خودم هیچی نفهمیدم از معنی لغویش ولی اگه نخوایم با معنی لغوی بریم جلو بخوایم ساده بگیم ، یک المان رفتار را مشخص میکنه و المان دیگه اون رفتار رو اجرا میکنه بخوام مدل دیگه بگیم اون رفتار رو درک میکنه.Dependencyیعنی چی؟ Dependency در لغت به معنی وابستگی ا ، رابطه وابستگی رابطه ای است که تو اون یک عنصر یعنی مشتری از عنصر دیگه یعنی تامین کننده استفاده میکنه یا به اون وابسته اس.Aggregationیعنی چی؟ Aggregation تو لغت به معنی تجمیع ا، ولی خودمم از این هیچی نفهمیدم یکی از چیزایی که برام خیلی گُنگ بود همین اگریگیشن بود اینو میخوام با یه مثال توضیح بدم که بیشتر و بهتر بفهمیم.این عکسو نگاه کنید، یه شرکت داریم چند تا دپارتمان ،دقت کنید بغل شرکت یه یک نوشته یعنی یدونه شرکت. سمت دپارتمان یه ستاره گذاشته یعنی چند تا یه شرکت میتونه چند تا دپارتمان داشته باشه. اینجا ام همینه رابطه بین کمپانی و دپارتمان رو اگریگیشن میگیم.تو پرانتزاگر این رابطه ماندگار ، حالت کل به جز داشته باشه این رابطه به شکل aggregation نمایش داده میشه. مثل رابطه ماشین با چرخ.compositionیعنی چی؟ composition تو لغت به معنی ترکیب بندی ا، اینم مثل اگریگیشن خودم نفهمیدم باز ولی با این مثال میتونیم بفهمیم چیه ، اگر رابطه کل به جز به گونه ای باشه که یکی بدون اون یکی معنی نداشته باشه مثل رابطه بدن و دست اینو کامپوزیشن میگیم.تو پرانتر اخردقت کنید بعد از این که خط ها رو طبق الگو بالا کشیدید احتمال داره ارتباط های مختلفی داشته باشهتو این شکل میگه چه جوری باید مشخص کنیماگه یک به یک بود ارتباط باید 1 بزاریماگه یک به چند بود *..1 باید بزاریماگه چند به  چند بود یه * میزاریمحرف اخرکلاس دیاگرام یکی از مهم ترین دیاگرام هایی که یه برنامه نویس باید بلد باشهیه سریاتون شاید بگید چرا مثلا این چیه؟بعد از یادگیری میفهمیم چقدر مهمه و چقدر استفاده میشه وقتی همه چیز از قبل مشخص بشه خیلی راحت تر و خیلی اصولی تر شروع میشه و همه چیزو میدونیم دیگه فقط باید کد بزنیم ولی اگه اینارو نزنیم یه گُنگی خاصی تو کد زدنمون هست</description>
                <category>مهدی ساعدی</category>
                <author>مهدی ساعدی</author>
                <pubDate>Wed, 23 Feb 2022 11:11:58 +0330</pubDate>
            </item>
            </channel>
</rss>