Изхвърляне на UIImage и CGImage

Трябва ли да изхвърлям UIImages и CGImages в приложението MonoTouch, след като свърша работата с тях? Какви са ефектите от изхвърлянето на който и да е от тях?

Безопасно ли е да изхвърлите някой от тях, ако изображението все още се вижда?


person Dan Abramov    schedule 07.10.2012    source източник


Отговори (1)


Предлагам да използвате блок using за такива изображения:

using (var image = UIImage.FromFile ("demo.png"))
{
    //do something with your image here
    //such as passing it to an UIImageView.Image
}

Когато обектът напусне този блок, той ще бъде изхвърлен автоматично.

Като алтернатива можете да извикате Dispose() на UIImage, когато знаете, че сте готови да го използвате.

Ако не ги изхвърлите и заредите много изображения, в крайна сметка ще останете без памет. Зареждането на големи изображения с метода UIImage.FromBundle() е лоша идея, тъй като те са кеширани и нямате контрол върху това кога се изхвърля кешът.

Ако изхвърлите UIImage, което в момента е показано, нищо лошо няма да се случи с UIImageView, тъй като той запазва собствена препратка към изображението. Така че само C# управляваното изображение се изхвърля, но не непременно изображението Cocoatouch.

person Cheesebaron    schedule 07.10.2012
comment
В допълнение към отговора ви намерих този видеоклип полезен и за намиране на изтичане на информация като този раздел, който разширява какво прави Dispose в MonoTouch. - person Dan Abramov; 08.10.2012