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
    对象和调用
    ---------------------------------

  • 相关阅读:
    pycharm修改快捷键
    pycharm如何解决新建的文件没有后缀的问题
    创建py模板
    用ctrl+鼠标滚动调节字体大小
    pycharm调整代码长度分割线
    pycharm怎么设置代码自动补齐
    python3用BeautifulSoup抓取div标签
    python3用BeautifulSoup用re.compile来匹配需要抓取的href地址
    python3用BeautifulSoup用limit来获取指定数量的a标签
    python3用BeautifulSoup用字典的方法抓取a标签内的数据
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3111213.html
Copyright © 2011-2022 走看看