قابل توجه کسانی که درس رو پیگیری میکنن:
این پست فقط برای جواب به سوال biodread هست و مباحثش جزو آموزشای معمول این تاپیک نیست. اگه دوست داشتین اینو بخونین. اگه یه چیزایش رو متوجه نشدین هیچ اشکالی نداره، نگران نباشین!!!. فعلا لازم نیست بدونین. ایشالله در ادامه ...
----------------------------------------------------------------------------------------------------------------------------------------
سلام bio ، سجاد؟ اگه منظورت منم من محمد جوادم.
در مورد سوال اول من نمی خواستم درس رو بیخود سخت کنم و از بحث اصلی خارج بشم ولی اینجا که خارج از درسه یه توضیح کوچولو میدم
یکی از مباحثی که تو برنامه نویسی پیشرفته و برنامه های بزرگ و شی گرا خیلی مورد توجه می گیره بحث آبجکتهای معلق و به اصطلاح زباله ها هست. تو زبانهای شی گرا وقتی ما یه شی ایجاد می کنیم برای اون شی از حافظه فضا میگیریم. برای آدرسش از stack و برا مقدارش از heap. این خیلی مهمه که وقتی کارمون باهاش تموم شد فضای تخصیص داده تو حافظه برای اون آبجکت یا شی رو آزاد کنیم تا در ادامه با مشکل به اصطلاح برنامه نویسی leak memory مواجه نشیم.
یه راه برای حل این مشکل اینه که وقتی یه فضایی رو می گیریم و یا یه شی ای رو می سازیم، خودمون به صورت دستی اون رو از حافظه حذف کنیم. تو فلش مثلا removeEventListener یه تابعیه که ما به صورت دستی هر لیستنری رو که دیگه بهش نیاز نداریم از حافظه پاک کنیم.
یه راه دیگه ای که زبان جاوا اون رو مطرح کرد و بعدش هم مایکروسافت تو دات نت ازش استفاده کرد بحث gorbage collector هست که یه موتوریه که خود به خود refrence های معلق و آبجکتهایی که دیگه بهشن نیاز نیست رو تشخیص میده و بدون اینکه ما صراحتا کدی برای حذف اونا بنویسیم خودش حافظه اختصاص داده به اونا رو آزاد می کنه.
به تبعیت از این زبانها As3 هم بحث gorbage collection رو تو خودش گنجونده و فکر می کنم از فلش پلیر 9 به بعد این ویژگی در دسترس باشه.
خوب حالا بریم سر بررسی موردی آرگومانهای اضافه شده.
PHP:
eventTarget.addEventListener(EventType.EVENT_NAME,
eventResponse, useCapture:Boolean, priority:
int, weakReference:Boolean);
دو تا آرگومان اول که جای بحث نداره و مشخصه. می مونه سه تا آرگومان اختیاری بعدی.
آرگومان سوم useCapture به اینصورته که اگه روی true ست شده باشه به کاربر اجازه میده که حتی قبل از اینکه لیستنر ، مسیرش (تارگتش) رو پیدا کنه تا به اصطلاح لیستنر رو handle کنه.
ولی اگه این پارامتر روی false ست شده باشه به event فقط موقعی واکنش نشون میده که تارگتش رو پیدا کرده باشه
پارامتر چهارم برای لیستنرهای چند گانست (multiple listener) . که event ای رو که برای یه کار خاص ست میکنه. خیلی خیلی بعیده که این حالت استفاده بشه و عدد صفر کار ما رو را میندازه.
پارامتر پنجم که پارامتر اصلی مورد بحثه و در مواقعی که ما یادمون می ره یه آبجکتی که لازمش نداریم رو پاک کنیم در مورد مدیریت حافظه خیلی به ما کمک می کنه.
موقعی که ما در ادامه برنامه به یه آبجکت نیازی نداشته باشیم اون آبجکت برچسب cleanup می خوره. gorbage collector بهر چند وقت یه بار فعال میشه و برنامه ما رو سرچ می کنه و آبجکتایی که برچسب cleanup خوردن رو حذف می کنه و حافظه رو از شر وجود اونا پاک میکنه
پارامتر پنجم در حالت پیشفرض روی false ست شده. ولی وقتی ما اون رو true می کنیم به flashplayer میگیم که : اهوی! حواست باشه این eventlistener یه جایی دیگه کار باهاش تموم میشه و یا به عبارتی weak reference خواهد شد. پس هر وقت این اتفاق افتاد برچسبش بزن تا gorbage collector اون رو پاک کنه
دو تا پارامتر اول اختیاری(پارامترای سوم و چهارم) حتما باید ست شده باشن تا این پارامتر شناخته بشه و ارور سینتکسی نداشته باشیم.
این از سوال اول
در مورد سوال دوم ، آره. حتما باید null بشه وگرنه باقی میمونه.
مثال آخری برای همینه دیگه. ببین قبل از Null کردن از ball ، تریس گرفته هنوز بوده ولی بعد null کردن trace گرفته دیگه چیزی نبوده