關於製做QQ音樂中關於文件加載的問題ios
在iosAPP中,通常咱們應該儘量的使咱們開發的APP運行時所佔用的內存儘量的小正則表達式
因此在咱們運行APP時,加載文件的時候,咱們須要採起不同的方法數組
在這裏咱們應該經過文件所在的路徑來讀取這個文件,而不是把文件直接加載到咱們應用的APP中spa
這裏我就以QQ音樂中加載歌詞爲例component
1.orm
//根據文件名稱獲取文件地址對象
NSString *path =[[NSBundle mainBundle] pathForResource:fileName ofType:nil];排序
2.ip
//根據文件地址獲取轉化後的整體的字符串內存
NSString *lyricStr =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error :NULL];
3.
//將歌詞整體字符串按行拆分開,每一句都做爲一個數組元素存放到數組中
NSArray *lineStrs =[lyricStr componentsSeparatedByString:@"\n"];
4.
//設置歌詞時間正則表達式格式
NSString *pattern =@"\\[[0-9]{2}:[0-9]{2}.[0-9]{2}\\]";
NSRegularExpression *reg=[NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
5.
//建立可變數組存放歌詞模型
NSMutableArray *lyrics = [NSMutableArray array];
6.
//遍歷歌詞字符串數組
for (NSString *lineStr in lineStrs) {
NSArray *results = [reg matchesInString:lineStr options:0 range:NSMakeRange(0,lineStr.length)];
//歌詞內容
NSTextCheckingResult *lastResult = [results lastObject];
NSString *content = [lineStr substringFromIndex:lastResult.range.location + lastResult.range.length];
//每個結果的range
for(NSTextCheckingResult *result in results) {
NSString *time =[lineStr substringWithRange:result.range];
//對於 NSDateFormatter 相似的重大開小對象,最好使用單例管理
NSDateFormatter *formatter =[NSDateFormatter sharedDateFormatter];
formatter.dateFormat =@"[mm:ss.SS]";
NSDate *_Nullable timeDate =[formatter dateFromString:time];
NSDate *_Nullable initDate =[formatter dateFromString:@"00:00.00"];
//建立模型
WPFLyric *lyric = [[WPFLyric alloc] init];
lyric.content=content;
//歌詞的開始時間
lyric.time = [timeDate timeIntervalSinceDate:initDate];
//將歌詞對象添加到模型數組彙總
[lyrics addObject:lyric];
}
}
7.
//按照時間正序排序
NSSortDescriptor *sortDes =[NSSortDescriptor sortDescriptorWithKey:@"time" ascending:YES];
[lyrics sortUsingDescriptors:@[sortDes]];
關於製做QQ音樂的其它注意事項我會陸續的爲你們更新.