iOS学习笔记

GeekBand-IOS进阶第三周笔记(多线程、数据持久化)

2016-09-25  本文已影响0人  周一见丶

多线程

NSThread

基本概念

多线程概念.png

多线程API

多线程API.png

我们现在讨论的主要是NSThread,它是基于OC的接口。


两类线程.png

小区别:主进程退出时不管detached only执行完毕与否都立即结束,joinable by default没有执行完时主进程也不能退出。
Operation系列是对象,代表一个任务;Queue代表调度。
NSOperation+NSOperationQueue;Dispatch Queue更加灵活强大,基于C的。

Main Thread

主线程.png
NSThread.png

开销大的任务在新线程执行:

线程开销

线程开销.png

线程属性及存储

线程属性及存储.png

线程局部存储:存储在内存上,不和其他线程共享,没有并发访问冲突的问题。

线程控制

线程控制.png

线程一般只有这三个状态,依次是执行、完成、取消。

NSRunLoop

基本概念

NSRunLoop.png

RunLoop Mode

RunLoop Mode.png

预定义RunLoop Mode

预定义RunLoop Mode.png
Common Modes.png

NSRunLoop生命周期

NSRunLoop生命周期.png

示例

示例API.png

NSoperation

多线程目的

线程目的.png

NSOperation抽象基类

NSOperation抽象基类.png

子类

NSBlockOperation.png
NSInvocationOperation.png
依赖关系.png

NSOperation状态

NSOperation状态.png

GCD

queue.png

自定义只能创建串行queue,为避免系统崩溃,只可以用默认的并行queue。

数据持久化

简单的一些方法

数据持久化.png
(void)easyload
{
    //主程序目录
    NSString *testpath = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"png"];
    NSLog(@"testpath:%@",testpath);
   //最后一个Documents目录
    NSString *Documentspath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"Documents:%@",Documentspath);
    //将图片存到Documents
    NSString *imagepath = [Documentspath stringByAppendingPathComponent:@"imagetest.png"];
    UIImage *imagetest = [UIImage imageNamed:@"test.png"];
    NSData *imagedata = UIImagePNGRepresentation(imagetest);
    [imagedata writeToFile:imagepath atomically:YES];
    //将文本存到Documents
    NSString *testpath01 = [Documentspath stringByAppendingPathComponent:@"test.txt"];
    NSString *teststr = [NSString stringWithFormat:@"test"];
    [teststr writeToFile:testpath01 atomically:YES encoding:NSUTF8StringEncoding error:nil];
    //将数组存到Documents
    NSString *arrayPath = [Documentspath stringByAppendingPathComponent:@"array.plist"];
    NSArray *array = @[@"haha",@"121",@"nihao",@515];
    [array writeToFile:arrayPath atomically:YES];
    //将字典存到Documents
    NSString *dictionarypath = [Documentspath stringByAppendingPathComponent:@"dictionary.plist"];
    NSDictionary *dictionary = @{@"张三":@26,@"李四":@20};
    [dictionary writeToFile:dictionarypath atomically:YES];
}  
(void)writeNSUserDefaults
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:@"周一见" forKey:@"name"];
    [userDefaults setBool:YES forKey:@"sex"];
    [userDefaults setInteger:22 forKey:@"age"];
    UIImage *image = [UIImage imageNamed:@"test.png"];
    NSData *imageData = UIImagePNGRepresentation(image);
    [userDefaults setObject:imageData forKey:@"image"];
    [userDefaults synchronize];   
}

 (void)readNSUserDefaults
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    
    NSString *name = [userDefaults objectForKey:@"name"];
    NSInteger age = [userDefaults integerForKey:@"age"];
    NSData *imageData = [userDefaults dataForKey:@"image"];
    UIImage *image = [UIImage imageWithData:imageData];
    
    self.name.text = name;
    self.age.text = [NSString stringWithFormat:@"%ld",age];
    self.faceImage.image = image;  
}
上一篇 下一篇

猜你喜欢

热点阅读