iOS开发Instruments性能调优 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    性能是苹果审核的一个很重要的部分,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];

最新文章