Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CorePlot慢性能_Ios_Objective C_Core Plot - Fatal编程技术网

Ios CorePlot慢性能

Ios CorePlot慢性能,ios,objective-c,core-plot,Ios,Objective C,Core Plot,我有下面的CorePlot(v1.2)代码,它是基于教程的,但是扩展了一点。使用大约30个数据点,在iPhone4S上渲染图形大约需要3秒钟。图表加载正确,只是速度慢。是否有改进性能的方法 以下是NSLog输出形式的代码: 2013-05-30 17:41:20.386 myApp[2796:907] A 2013-05-30 17:41:20.387 myApp[2796:907] B 2013-05-30 17:41:20.388 myApp[2796:907] C 2013-05-30 1

我有下面的CorePlot(v1.2)代码,它是基于教程的,但是扩展了一点。使用大约30个数据点,在iPhone4S上渲染图形大约需要3秒钟。图表加载正确,只是速度慢。是否有改进性能的方法

以下是NSLog输出形式的代码:

2013-05-30 17:41:20.386 myApp[2796:907] A
2013-05-30 17:41:20.387 myApp[2796:907] B
2013-05-30 17:41:20.388 myApp[2796:907] C
2013-05-30 17:41:20.389 myApp[2796:907] D
2013-05-30 17:41:21.158 myApp[2796:907] E
2013-05-30 17:41:21.160 myApp[2796:907] F
2013-05-30 17:41:22.594 myApp[2796:907] G
-(void)configureAxes {

    NSLog(@"A");
    // 1 - Create styles
    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle];
    axisTitleStyle.color = [CPTColor whiteColor];
    axisTitleStyle.fontName = @"Helvetica-Bold";
    axisTitleStyle.fontSize = 12.0f;
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
    axisLineStyle.lineWidth = 2.0f;
    axisLineStyle.lineColor = [CPTColor whiteColor];
    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init];
    axisTextStyle.color = [CPTColor whiteColor];
    axisTextStyle.fontName = @"Helvetica-Bold";
    axisTextStyle.fontSize = 11.0f;
    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle];
    tickLineStyle.lineColor = [CPTColor whiteColor];
    tickLineStyle.lineWidth = 2.0f;
    NSLog(@"B");
    // 2 - Get axis set
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet;

    // 3 - Configure x-axis
    CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];
    lineStyle.lineColor = [CPTColor whiteColor];
    lineStyle.lineWidth = 2.0f;

    CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle];
    textStyle.fontName = @"Helvetica";
    textStyle.fontSize = 14;
    textStyle.color = [CPTColor whiteColor];

    axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0.0");
    axisSet.xAxis.minorTicksPerInterval       = 0;

    NSLog(@"C");
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    if ([person.unitPreference isEqualToString:@"US"]) {
        [dateFormatter setDateFormat:@"MMM-dd"];
    } else {
        [dateFormatter setDateFormat:@"dd-MMM"];
    }
    NSLog(@"D");
    CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
    axisSet.xAxis.labelFormatter = timeFormatter;
    axisSet.xAxis.labelRotation = M_PI/4;
    axisSet.xAxis.titleOffset = 55.5f;
    axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic;    
    NSLog(@"E");
    if ([measurementField isEqualToString:@"mWeight"]) {
        NSString *unit;
        if ([person.unitPreference isEqualToString:@"METRIC"]) {
            unit = @"Kgs";
        } else if ([person.unitPreference isEqualToString:@"US"]) {
            unit = @"lbs";
        } else {
            unit = @"st lbs";
        }
        axisSet.yAxis.title = [NSString stringWithFormat: @"Weight (%@)", unit];

        WeightFormatter *weightFormatter = [[WeightFormatter alloc] init];
        weightFormatter.person = person;
        axisSet.yAxis.labelFormatter = weightFormatter;
    } else if ([measurementField isEqualToString:@"mBodyFatPercentage"]) {
        axisSet.yAxis.title = @"Body Fat %";
        axisSet.yAxis.labelFormatter = [[BodyFatPercentageFormatter alloc] init];
    } else {
        NSString *unit;
        if ([person.unitPreference isEqualToString:@"METRIC"]) {
            unit = @"CMs";
        } else {
            unit = @"Inches";
        }
        axisSet.yAxis.title = [NSString stringWithFormat: @"Measurements (%@)", unit];

        MeasurementFormatter *measurementFormatter = [[MeasurementFormatter alloc] init];
        measurementFormatter.person = person;
        axisSet.yAxis.labelFormatter = measurementFormatter;
    }
    NSLog(@"F");
    axisSet.yAxis.titleTextStyle = textStyle;
    axisSet.yAxis.titleOffset = 40.0f + marginOffset;
    axisSet.yAxis.axisLineStyle = lineStyle;
    axisSet.yAxis.majorTickLineStyle = lineStyle;
    axisSet.yAxis.minorTickLineStyle = lineStyle;
    axisSet.yAxis.labelTextStyle = textStyle;
    axisSet.yAxis.labelOffset = 3.0f;
    axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat((yAxisMax-yAxisMin)/10.0f);
    axisSet.yAxis.minorTicksPerInterval = 1;
    axisSet.yAxis.minorTickLength = 5.0f;
    axisSet.yAxis.majorTickLength = 7.0f;
    axisSet.yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
    axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(yAxisMin);
    axisSet.xAxis.majorIntervalLength =  CPTDecimalFromFloat(oneDay);
    NSLog(@"G");
}
注意:代码运行完成后,在图形渲染之前还有大约0.5秒的延迟

以及守则:

2013-05-30 17:41:20.386 myApp[2796:907] A
2013-05-30 17:41:20.387 myApp[2796:907] B
2013-05-30 17:41:20.388 myApp[2796:907] C
2013-05-30 17:41:20.389 myApp[2796:907] D
2013-05-30 17:41:21.158 myApp[2796:907] E
2013-05-30 17:41:21.160 myApp[2796:907] F
2013-05-30 17:41:22.594 myApp[2796:907] G
-(void)configureAxes {

    NSLog(@"A");
    // 1 - Create styles
    CPTMutableTextStyle *axisTitleStyle = [CPTMutableTextStyle textStyle];
    axisTitleStyle.color = [CPTColor whiteColor];
    axisTitleStyle.fontName = @"Helvetica-Bold";
    axisTitleStyle.fontSize = 12.0f;
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
    axisLineStyle.lineWidth = 2.0f;
    axisLineStyle.lineColor = [CPTColor whiteColor];
    CPTMutableTextStyle *axisTextStyle = [[CPTMutableTextStyle alloc] init];
    axisTextStyle.color = [CPTColor whiteColor];
    axisTextStyle.fontName = @"Helvetica-Bold";
    axisTextStyle.fontSize = 11.0f;
    CPTMutableLineStyle *tickLineStyle = [CPTMutableLineStyle lineStyle];
    tickLineStyle.lineColor = [CPTColor whiteColor];
    tickLineStyle.lineWidth = 2.0f;
    NSLog(@"B");
    // 2 - Get axis set
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostView.hostedGraph.axisSet;

    // 3 - Configure x-axis
    CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];
    lineStyle.lineColor = [CPTColor whiteColor];
    lineStyle.lineWidth = 2.0f;

    CPTMutableTextStyle *textStyle = [CPTMutableTextStyle textStyle];
    textStyle.fontName = @"Helvetica";
    textStyle.fontSize = 14;
    textStyle.color = [CPTColor whiteColor];

    axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromString(@"0.0");
    axisSet.xAxis.minorTicksPerInterval       = 0;

    NSLog(@"C");
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    if ([person.unitPreference isEqualToString:@"US"]) {
        [dateFormatter setDateFormat:@"MMM-dd"];
    } else {
        [dateFormatter setDateFormat:@"dd-MMM"];
    }
    NSLog(@"D");
    CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
    axisSet.xAxis.labelFormatter = timeFormatter;
    axisSet.xAxis.labelRotation = M_PI/4;
    axisSet.xAxis.titleOffset = 55.5f;
    axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic;    
    NSLog(@"E");
    if ([measurementField isEqualToString:@"mWeight"]) {
        NSString *unit;
        if ([person.unitPreference isEqualToString:@"METRIC"]) {
            unit = @"Kgs";
        } else if ([person.unitPreference isEqualToString:@"US"]) {
            unit = @"lbs";
        } else {
            unit = @"st lbs";
        }
        axisSet.yAxis.title = [NSString stringWithFormat: @"Weight (%@)", unit];

        WeightFormatter *weightFormatter = [[WeightFormatter alloc] init];
        weightFormatter.person = person;
        axisSet.yAxis.labelFormatter = weightFormatter;
    } else if ([measurementField isEqualToString:@"mBodyFatPercentage"]) {
        axisSet.yAxis.title = @"Body Fat %";
        axisSet.yAxis.labelFormatter = [[BodyFatPercentageFormatter alloc] init];
    } else {
        NSString *unit;
        if ([person.unitPreference isEqualToString:@"METRIC"]) {
            unit = @"CMs";
        } else {
            unit = @"Inches";
        }
        axisSet.yAxis.title = [NSString stringWithFormat: @"Measurements (%@)", unit];

        MeasurementFormatter *measurementFormatter = [[MeasurementFormatter alloc] init];
        measurementFormatter.person = person;
        axisSet.yAxis.labelFormatter = measurementFormatter;
    }
    NSLog(@"F");
    axisSet.yAxis.titleTextStyle = textStyle;
    axisSet.yAxis.titleOffset = 40.0f + marginOffset;
    axisSet.yAxis.axisLineStyle = lineStyle;
    axisSet.yAxis.majorTickLineStyle = lineStyle;
    axisSet.yAxis.minorTickLineStyle = lineStyle;
    axisSet.yAxis.labelTextStyle = textStyle;
    axisSet.yAxis.labelOffset = 3.0f;
    axisSet.yAxis.majorIntervalLength = CPTDecimalFromFloat((yAxisMax-yAxisMin)/10.0f);
    axisSet.yAxis.minorTicksPerInterval = 1;
    axisSet.yAxis.minorTickLength = 5.0f;
    axisSet.yAxis.majorTickLength = 7.0f;
    axisSet.yAxis.axisConstraints = [CPTConstraints constraintWithLowerOffset:0.0];
    axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(yAxisMin);
    axisSet.xAxis.majorIntervalLength =  CPTDecimalFromFloat(oneDay);
    NSLog(@"G");
}

这是coreplot 1.2引入的。以下几行可能会导致应用程序长时间挂起:

axisSet.xAxis.labelRotation = M_PI/4;
axisSet.xAxis.titleOffset = 55.5f;
恢复到1.1立即解决了问题。从上面@Eric Skroch的评论来看,这可能会在1.3中得到修复,但在此之前我希望使用一个稳定的版本,尤其是因为我没有使用1.2中的任何新功能

另一方面,我认为旧库不能与我的iPhone 5配合使用的原因是没有以下内容:

  • 添加到目标生成设置中的其他链接器标志:

    -ObjC-所有负载


  • 将标签策略设置为“无”非常重要,以明确您将要自定义x轴和y轴

    CPTAxis *x = axisSet.xAxis;
    
    CPTAxis *y = axisSet.yAxis;
    
    x.labelingPolicy = CPTAxisLabelingPolicyNone;
    y.labelingPolicy = CPTAxisLabelingPolicyNone;
    

    您使用的核心图是什么版本?当图形最终显示时,它是否显示正确?谢谢Eric,我使用的是1.2,并且图形的渲染正确。事实上,我最近从1.1升级到了1.1,因为我在iPhone5上遇到了1.1的问题。我可以尝试回滚,看看新版本是否引入了性能开销。我很久以前就完成了所有这些代码,不记得当时在性能方面有任何问题,但我的内存很脆弱。。。我必须承认,我认为这不是由新版本引起的,但这似乎很有道理。1.2确实存在一个问题,它有时会创建大量额外的轴标签,从而减慢了速度。我在你发布的代码中没有看到任何可能引发问题的东西,但这仍然是可能的。如果您将此问题追溯到1.2版本,请使用Mercurial获取最新代码以获得修复。您从何处调用此函数?我怀疑它正在为您所做的每一次更改更新轴…edo42,不,它们只被调用一次。