对象调用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
对象和调用
---------------------------------
转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/31/3111213.html
对象调用corePlot使用技巧及iOS内存优化之道相关推荐
- IOS 内存优化和调试技巧
基础部分 1: 图片内存大小小结 a: 图片:是占用内存的大户,尤其是手机游戏图片资源众多.对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中 ...
- iOS内存优化及排查方法
1.IBOutlet 对象需要release 2.不停的往UIView,特别是UIScrollView上add相同SubView.一定要记得清除之前的SubView,并且在dealloc函数中执行该方 ...
- iOS内存管理系列之一:对象所有权与引用计数
原文地址:[转]iOS内存管理系列之一:对象所有权与引用计数作者:anynot 内存管理是iPhone或iPad开发中最为重要的一部分.掌握好了内存管理,开发出的应用就能运行流畅:掌握不好,开发出的东 ...
- iOS内存暴增问题追查与使用陷阱
iOS平台的内存使用引用计数的机制,并且引入了半自动释放机制:这种使用上的多样性,导致开发者在内存使用上非常容易出现内存泄漏和内存莫名的增长情况: 本文会介绍iOS平台的内存使用原则与使用陷阱: 深度 ...
- Objective-C runtime机制(5)——iOS 内存管理
概述 当我们创建一个对象时: SWHunter *hunter = [[SWHunter alloc] init]; 上面这行代码在栈上创建了hunter指针,并在堆上创建了一个SWHunter对象. ...
- iOS内存管控实战(上)—原理篇
因文章单篇过长,按照 原理.分析工具 和 实战 拆分成上.中.下三部分,点击阅读. iOS内存管控实战(上)-原理篇 iOS内存管控实战(中)-分析工具篇 iOS内存管控实战(下)-实战篇 前言 近期 ...
- 内存管理 浅析 内存管理/内存优化技巧
内存管理 浅析 下列行为都会添加一个app的内存占用: 1.创建一个OC对象: 2.定义一个变量: 3.调用一个函数或者方法. 假设app占用内存过大.系统可能会强制关闭app,造成闪退现象,影响用户 ...
- iOS内存管控实战(中)-分析工具篇
因文章单篇过长,按照 原理.分析工具 和 实战 拆分成上.中.下三部分,点击阅读. iOS内存管控实战(上)-原理篇 iOS内存管控实战(中)-分析工具篇 iOS内存管控实战(下)-实战篇 二.内存分 ...
- 内存管理 内存优化技巧 浅析
内存管理 浅析 下列行为都会增加一个app的内存占用: 1.创建一个OC对象: 2.定义一个变量: 3.调用一个函数或者方法. 如果app占用内存过大,系统可能会强制关闭app,造成闪退现象,影响用户 ...
- WWDC 2018:iOS 内存深入研究
WWDC 2018 Session 416:iOS Memory Deep Dive 查看更多 WWDC 18 相关文章请前往 老司机x知识小集xSwiftGG WWDC 18 专题目录 作者:高老师 ...
最新文章
- Spring Boot 2.0官方文档之 Actuator
- 计算机组成原理we指什么,计算机组成原理课后习题答案一到九章
- 《移动项目实践》实验报告——Android调试与上线
- php与sql server,PHP和SQL Server – 思考
- 怎么在gitLab代码拉到本地
- redission分布式锁测试代码
- git详细使用教程入门到精通(史上最全的git教程)
- Mysql按时间段分组查询来统计会员的个数
- 那些年,陪伴过我们的下载软件(上)
- 代理模式---论坛权限控制代理
- 支付系统总结 ( 收单,收银,资产交互,账务 )
- 液晶显示技术 TCON介绍
- mc:Ignorable=“d“什么意思?
- linux主机做racl,linux学习日记十一 账号管理与ACL权限设置
- MAVEN Plugins 插件官网下载
- flatten(扁平化)数组
- [C++]auto类型说明符
- ENVI 5.1设置影像背景值透明显示
- 算法导论 3.2-1 关于单调递增函数的证明
- 新版正方教务系统Java爬取_正方教务系统成绩爬取(仅个人)+tk可视化
热门文章
- ERROR: The minSdk version should not be declared in the android manifest file.
- 深入浅出梯度下降法1
- 一个计算机高手的成长zz
- LGP2046[NOI2010]海拔正确性证明
- ThinkPHP5 模型 - 事务支持
- Luogu P3223 [HNOI2012]排队 组合
- BZOJ1934: [Shoi2007]Vote 善意的投票
- 雾里看花之 Python Asyncio
- 用浏览器控制台查看ajax请求
- [转] Python的import初探