cocoa IKImageBrowserView memory management -
i use ikimagebrowserview in application, if add many photos on application stops working , in profiler see allocated memory high.. need optimize somehow . here browseritem :
public class browseitem : ikimagebrowseritem { // ..... public override nsstring imagerepresentationtype { { return ikimagebrowseritem.nsurlrepresentationtype; } } public override nsobject imagerepresentation { { return nsurl.fromfilename (_path); } } }
and data source:
public class browsedata : ikimagebrowserdatasource { string _arrangeby; list<browseitem> images; list<string> dategroup { get; set; } public override void invoke (action action, double delay) { base.invoke (action, delay); } public browsedata (string arrangeby) : base () { _arrangeby = arrangeby; images = new list<browseitem> (); } public void fillitems (ienumerable<browseitem> data) { if (data != null) { switch (_arrangeby) { case "month": dategroup = data.select (x => x.month).distinct ().tolist (); break; case "year": dategroup = data.select (x => x.year).distinct ().tolist (); break; default: dategroup = data.select (x => x.day).distinct ().tolist (); break; } images = data.tolist (); } } #region required ikimagebrowserdatasource methods public override nint groupcount (ikimagebrowserview abrowser) { return dategroup.count; } public override nsdictionary getgroup (ikimagebrowserview abrowser, nint index) { var dateheader = dategroup [(int)index]; nsrange range = getindexbygroup ((int)index, dateheader); #region objects var rangevalue = nsvalue.fromrange (range); var stylevalue = nsnumber.fromnint ((int)ikgroupstyle.disclosure); nsstring titlevalue = new nsstring (dateheader); #endregion var objs = new nsobject [] { rangevalue, titlevalue, stylevalue }; var keys = new string [] { grouprangekey, grouptitlekey, groupstylekey }; return nsdictionary.fromobjectsandkeys (objs, keys); } public override nint itemcount (ikimagebrowserview abrowser) { return images.count; } public override iikimagebrowseritem getitem (ikimagebrowserview abrowser, nint index) { return images [(int)index]; } #endregion public browseitem getitembyindex (int index) { return images [index]; } nsrange getindexbygroup (int index, string dateheader) { browseitem item; var indexofitem = 0; int count = 0; switch (_arrangeby) { case "month": item = images.first (x => x.month == dateheader); count = images.count (x => x.month == dateheader); break; case "year": item = images.first (x => x.year == dateheader); count = images.count (x => x.year == dateheader); break; default: item = images.first (x => x.day == dateheader); count = images.count (x => x.day == dateheader); break; } indexofitem = images.indexof (item); return getrange (indexofitem, count); } nsrange getrange (int index, int count) { nsrange range = new nsrange (index, count); return range; } }
Comments
Post a Comment