性能是苹果审核的一个很重要的部分,CPU,内存,图形绘制,存储空间和网络性能都是应用的重要的评估和组成部分,
iOS开发Instruments性能调优
。不管是作为个人应用开发者还是企业的开发人员,都需要遵循的一个原则是站在用户的角度去思考问题,比如说常见的适配问题,不能因为不同的机型导致最终出现的UI效果差异很大,用户在使用的过程的中最好不要表现出明显的卡顿现象,或者更严重的是出现App闪退,出现闪退的结果就是应用被删,这是属于比较严重的问题。Instruments是目前最强大的性能调试工具之一,有助于我们解决应用存在的性能问题。Instruments是里面包括了内存管理工作,I/O以及网络过去,本文主要讲述的是Allocation和Time Profle。Allocations(内存分配)
就是动态的将文字输出在视图上,下面贴出代码你会发现开始还好运行到慢的简直跟蜗牛有的一拼,不要运行太久,否则内存不够用,代码如下:
@implementation FETextView- (id)initWithFrame.:(CGRect)frame. text:(NSString *)text { self = [super initWithFrame.:frame]; if (self) { [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(appendNextCharacter) userInfo:nil repeats:YES]; _text = [text copy]; self.backgroundColor = [UIColor whiteColor]; } return self;}//原文地址www.2cto.com- (void)appendNextCharacter { for (NSUInteger i = 0; i <= self.index; i++) { if (i < self.text.length) { UILabel *label = [[UILabel alloc] init]; label.text = [self.text substringWithRange:NSMakeRange(i,1)]; label.opaque = NO; [label sizeToFit]; CGRect frame. = label.frame; frame.origin = [self originAtIndex:i fontSize:label.font.pointSize]; label.frame=frame; [self addSubview:label]; } } self.index++;}- (CGPoint)originAtIndex:(NSUInteger)index fontSize:(CGFloat)fontSize { if (index == 0) { return CGPointZero; } else { CGPoint rigin = [self originAtIndex:index-1 fontSize:fontSize]; NSString * prevCharacter = [self.text substringWithRange:NSMakeRange(index-1,1)]; CGSize prevCharacterSize = [prevCharacter sizeWithAttributes:@{ NSFontAttributeName: [UIFont systemFontOfSize:fontSize] }]; origin.x += prevCharacterSize.width; if (origin.x > CGRectGetWidth(self.bounds)) { origin.x = 0; origin.y += prevCharacterSize.height; } return origin; }}@end主视图控制器的调用代码:
NSString *path = [[NSBundle mainBundle] pathForResource:@"FlyElephant" ofType:@"txt"];FETextView *textView = [[FETextView alloc] initWithFrame.:CGRectMake(0, 64, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds)) text:[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]];[self.view addSubview:textView];