Показать сообщение отдельно
Старый 26.03.2013, 19:41   #2
devolonter
Разработчик
 
Аватар для devolonter
 
Регистрация: 17.01.2007
Сообщений: 409
Написано 114 полезных сообщений
(для 281 пользователей)
Ответ: Отрицательные моменты в Monkey

Объективные и верные замечания. Хотел только немного уточнить ситуацию под Discard.

Этот метод нужно использовать только тогда, когда вы больше не планируете использовать высвобождаемый ресурс, совсем. Т.к. в противном случае, при обращении к изображению ссылающемуся на ресурс, который был высвобожден из памяти вы получите ошибку. Именно поэтому не всегда удобно и практично добавлять этот метод в деструктор. Лучше, чтобы этим занимался менеджер ресурсов

Например:
Local myImage:image = LoadImage("someimage.jpg")
Local myImage2:image = myImage

myImage.Discard()
myImage = Null

'ошибка
DrawImage(myImage2, 0, 0)
Так, ошибки не будет (утечки памяти тоже не будет):
Local myImage:image = LoadImage("someimage.jpg")
Local myImage2:image = myImage

myImage = Null

DrawImage(myImage2, 0, 0)

myImage2.Discard()
myImage2 = Null
Также, нет смысла вызывать Discard для изображений полученных через GrabImage. т.к. эти изображения хранят только ссылку на источник, а не новую копию ресурса. Mojo это учитывает и игнорирует высвобождение ресурсов.

Discard помимо изображений нужно вызывать также и для звуковых файлов. Опять таки только в том случае, если больше не планируете использовать данные ресурсы.
(Offline)
 
Ответить с цитированием