国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

KVO實現自定義文件復制進度展示

2019-11-14 19:21:08
字體:
來源:轉載
供稿:網友
一、創建文件

  說明:自定義文件類,通過NSFileManager 以及NSFileHandle 實現文件的創建和copy,為了控制內存的并發使用,通過控制每次賦值的固定長度來分多次復制:

NSString * path=NSHomeDirectory();    path =[path stringByAppendingPathComponent:@"deskTop/Boby.m"];        NSString * target=NSHomeDirectory();    target =[target stringByAppendingPathComponent:@"deskTop/target.m"];        NSFileManager * manager=[NSFileManager defaultManager];            //校驗并且創建文件    if(![manager fileExistsAtPath:path]){        [manager createFileAtPath:path contents:nil attributes:nil];    }        if(![manager fileExistsAtPath:target]){        [manager createFileAtPath:target contents:nil attributes:nil];    }    NSDictionary * dic=[manager attributesOfItemAtPath:path error:nil];        NSFileHandle * handle=[NSFileHandle fileHandleForReadingAtPath:path];    NSFileHandle * handletTarget=[NSFileHandle fileHandleForWritingAtPath:target];        int total=(int)[dic[@"NSFileSize"] integerValue];    self.totalSize=total;    int per=50;    int count=total%per==0?total/per:total/per+1;    for(int i=0;i<count;i++){               [handle seekToFileOffset:self.nowSize];        NSData *data= [handle readDataOfLength:per];                int tem=per*(i+1);        if(tem>total){            tem=total;        }        self.nowSize=tem;         [handletTarget seekToEndOfFile];        [handletTarget writeData:data];        [NSThread sleepForTimeInterval:0.2];            }        [handle closeFile];[handletTarget closeFile];
二、設置觀察者

  說明:自定義使用者,通過設置觀察者來動態觀察當前文件copy的進度并展示到控制臺或者輸出到UI,并提供方法接口,啟動文件拷貝。

- (id) initWithFile:(FileMake *)files{    self=[super init];        if(self){        self.file= files;        [self.file addObserver:self forKeyPath:@"nowSize" options:NSKeyValueObservingOptionNew context:nil];    }    return self;}-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    CGFloat all=self.file.totalSize;    CGFloat now=[[change objectForKey:@"new"] floatValue];    CGFloat result=now/all;     NSLog(@"%.2f",result);    //一定不能忘了銷毀當前的觀察者    if(result==1){        [self.file removeObserver:self forKeyPath:@"nowSize"];    }}- (void) begin{    [self.file startCopy];}

 

作者:杰瑞教育
出處:http://m.survivalescaperooms.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大安市| 乌审旗| 育儿| 江源县| 鲜城| 开封县| 丽水市| 通江县| 永州市| 元朗区| 梁河县| 迁西县| 福清市| 新沂市| 邯郸市| 庄浪县| 商洛市| 黑水县| 偏关县| 丰台区| 临清市| 伊通| 龙川县| 石楼县| 孝义市| 东乌珠穆沁旗| 吴川市| 和田县| 安平县| 铜鼓县| 郴州市| 柳江县| 江阴市| 石屏县| 普格县| 当涂县| 册亨县| 昆山市| 临汾市| 离岛区| 广元市|