zoukankan      html  css  js  c++  java
  • 对象调用corePlot使用技巧及iOS内存优化之道

    在写这篇文章之前,xxx已经写过了几篇关于改对象调用主题的文章,想要了解的朋友可以去翻一下之前的文章

        

    corePlot 应用技巧:

        

    设置内边距:

        graph.plotAreaFrame.paddingLeft   +=5;

        graph.plotAreaFrame.paddingTop    +=5;

        graph.plotAreaFrame.paddingRight  +=5;

        graph.plotAreaFrame.paddingBottom +=17.5;

        

        

    制止缩放:(两指捏扩动作)

        [selfsetAllowPinchScaling:NO];//制止缩放

        

        

    设置坐标只能按照X轴横向滑动:(其他方向请自行理解)

        plotSpace.yRange = [CPTPlotRangeplotRangeWithLocation:CPTDecimalFromInt(0)length:CPTDecimalFromFloat(1)];

        plotSpace.globalYRange = [CPTPlotRangeplotRangeWithLocation:CPTDecimalFromInt(0)length:CPTDecimalFromFloat(1)];

        plotSpace.xRange = [CPTPlotRangeplotRangeWithLocation:CPTDecimalFromInt(1)length:CPTDecimalFromFloat(1)];

        plotSpace.globalXRange = [CPTPlotRangeplotRangeWithLocation:CPTDecimalFromInt(0)length:CPTDecimalFromFloat(2)];

        

        

    自定义轴label:

        x.axisLabels          = [self buildLabelTitle];

        x.labelingPolicy      = CPTAxisLabelingPolicyNone;//当设置这个Policy以后,坐标轴label及背景线tick都须要自己绘制,否则表现为空,请不要适度惊慌

        x.minorTickLocations  = [NSSetsetWithArray:locationLabels];

        

        - (NSMutableSet*)buildLabelTitle

        {

        NSMutableSet *newAxisLabels = [NSMutableSetset];

        

            CPTMutableTextStyle *textStyleB = [CPTMutableTextStyletextStyle];

        textStyleB.color = [CPTColorcolorWithComponentRed:CPTFloat((float)0x09/0xFF)green:CPTFloat((float)0x31/0xFF)blue:CPTFloat((float)0x4A/0xFF)alpha:CPTFloat(1.0)];

        

        int n = 1;

        for ( NSUInteger i =30; i > 0; i--) 

        {

            CPTAxisLabel *newLabel = [[CPTAxisLabelalloc] initWithText:@“这里是内容

                                                              textStyle:textStyleB];

                newLabel.tickLocation =CPTDecimalFromUnsignedInteger(n++);

            newLabel.offset = 5;

            [locationLabels addObject:[NSNumber numberWithFloat:(n-1) -0.25]];

            [locationLabels addObject:[NSNumber numberWithFloat:(n-1) +0.25]];

        每日一道理
    今天阳光很好,坐在窗前,看窗外如此晴朗的天感觉特别舒心,雨过天晴后的世界总给人一种明媚,仿佛阳光照耀在“心田”上空,让前些天被风雨践踏的花朵重新得到爱的关怀,重现生命的活力!

            [newAxisLabels addObject:newLabel];

            [newLabel release];

        }

        return newAxisLabels;

        }

        

        

    刷新图表内容:

        [[bar1graph] reloadData];

        

        

    组织数据源:

        [m_SO2OnlineCaddObject:[NSMutableDictionarydictionaryWithObjectsAndKeys:x, @"x", y,@"y", nil]];

        if (tmpY> MAX_data)

        {

            MAX_data = tmpY;

        }

        

        

    应用数据源:

        if ([(NSString*)plot.identifierisEqualToString:kBar1])

        {

            switch (fieldEnum)

        {

            caseCPTBarPlotFieldBarLocation:

                number = [[[m_SO2OnlineCobjectAtIndex:index] valueForKey:@"x"]doubleValue];

                break;

            caseCPTBarPlotFieldBarTip:

                number = [[[m_SO2OnlineCobjectAtIndex:index] valueForKey:@"y"]doubleValue]/ MAX_data;

                break;

            default:

                break;

            }

        }

        这里要记载MAX_data的原因是这里最好应用真实数据的绝对数据,否则当数据值很大的时候会消费corePlot的性能导致图形加载很慢。

        

        

    用延迟函数去调用数据初始化可以提高加载速度:

        [selfperformSelector:@selector(initPlotData)withObject:nilafterDelay:0.2];

        

        

    计算日期的简单方法:

        NSDateComponents* comps = [[NSDateComponentsalloc]init];

        [comps setDay:-i];

        NSDate *newDate = [[NSCalendarcurrentCalendar] dateByAddingComponents:compstoDate:[NSDate date]options:0];

        --------------------------------------------------------

        

    iOS内存优化及排查方法

        

        

    1.IBOutlet 对象须要release

        

        

    2.不绝的往UIView,特别是UIScrollView上add雷同SubView。一定要记得清除之前的SubView,并且在dealloc函数中执行该方法

        for (UIView* sbViewin scrvBg.subviews

        {

            [sbView removeFromSuperview];

        }

        这里还有个获得subView的小技巧:

        [subView setTag:300];

        subView = [self.viewviewWithTag:300]

        

        

    3.dealloc不一定会被调用,所以可以自己手写一个myRelease方法,当退出该界面的时候手动调用release须要释放的对象,并且将其置为nil。

        

        

    4.记着,如果你不太明白UIView的drawRect的调用时机,千万不要轻易往drawRect里写代码,特别是没有立即release的对象。很容易在这里因为多次调用了drawRect而没有release该对象导致内存溢出。

        

        

    5.检查内存泄漏最好的工具是xCode,当然不是说xCode工具排查完了就OK了。我们发现xCode只能检查明显的代码级别泄漏,而像下面第四点因为多次调用某个函数却没有配对release的逻辑性泄漏是排查不出来的,只能通过代码浏览排查。

        我这里能给出的教训就是,alloc的对象应该立即release。如果该对象不能立即release,必须保障alloc和release必须配对调用,特别要留意那些可以多次调用且包括alloc却未被实时release的函数。四个字归纳综合“非常危险”!

        

        

    6.属性对象不要用Self.来alloc它,例如:

        self.my_arr =[[NSArray alloc]init];    ----------     错误!

        

        NSArray *tmpArr = [[NSArray alloc]init];

        self.my = tmpArr;

        [tmpArr release];                               ----------      正确

    文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。

    --------------------------------- 原创文章 By
    对象和调用
    ---------------------------------

  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3111213.html
Copyright © 2011-2022 走看看