5

我在我的应用程序中使用 IKImageBrowserView,如果我在其上添加许多照片,应用程序将停止工作,并且在分析器中我看到分配的内存太高.. 我需要以某种方式对其进行优化。这是我的 BrowserItem :

public class BrowseItem : IKImageBrowserItem
    { // .....
        public override NSString ImageRepresentationType {
            get {
                return IKImageBrowserItem.NSURLRepresentationType;
            }
        }

        public override NSObject ImageRepresentation {
            get {
                return NSUrl.FromFilename (_path);
            }
        }
}

和数据来源:

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;
        }
}

分析结果:在此处输入图像描述

4

0 回答 0