uiimage - Image IO memory keeps growing -
i ran app in instruments vm tracker discovered growing image io memory consumption.
effectively, app did quite bit of reading images disk initwithcontentsoffile:
. read once method spawn of satan, replaced following:
nsdata *data = [nsdata datawithcontentsoffile:path]; uiimage *image = [uiimage imagewithdata:data];
this reduced virtual memory (about 60%), shown below:
but, why image io virtual memory keep growing on time, when there aren't leaks , app using 15mb of live memory?
is there can make sure image io memory released?
basically, image reading disk done this:
dispatch_async(dispatch_get_global_queue(dispatch_queue_priority_default, 0ul), ^(void) { nsdata *data = [nsdata datawithcontentsoffile:path]; uiimage *image = [uiimage imagewithdata:data]; dispatch_async(dispatch_get_main_queue(), ^{ imageview.image = image; }); });
i tried following without significant changes:
- use
[nsdata datawithcontentsoffile:path options:nsdatareadinguncached error:nil]
instead - move
uiimage *image = [uiimage imagewithdata:data];
main queue - do on main queue
which makes me think problem might elsewhere.
you should @ least wrap background processing autorelease pool:
dispatch_async(dispatch_get_global_queue(dispatch_queue_priority_default, 0ul), ^(void) { @autoreleasepool { nsdata *data = [nsdata datawithcontentsoffile:path]; uiimage *image = [uiimage imagewithdata:data]; dispatch_async(dispatch_get_main_queue(), ^{ imageview.image = image; }); } });
this way make sure autoreleased objects on background thread go away fast possible.
Comments
Post a Comment