Объективные и верные замечания. Хотел только немного уточнить ситуацию под 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 помимо изображений нужно вызывать также и для звуковых файлов. Опять таки только в том случае, если больше не планируете использовать данные ресурсы.