你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發-Instruments性能調優

iOS開發-Instruments性能調優

編輯:IOS開發綜合
性能是蘋果審核的一個很重要的部分,CPU,內存,圖形繪制,存儲空間和網絡性能都是應用的重要的評估和組成部分。不管是作為個人應用開發者還是企業的開發人員,都需要遵循的一個原則是站在用戶的角度去思考問題,比如說常見的適配問題,不能因為不同的機型導致最終出現的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 origin = [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];

 


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved