蓝懿 ios技术交流和心得分享 11.30

来源:互联网 发布:淘宝卖家开通花呗 编辑:程序博客网 时间:2024/05/05 21:04

今天老师教了我们新的内容   多线程:

数据持久化的方式:1.归档 2.UserDefault 3.CoreData 4.sqlite 

多线程:

1.不能在主线程中写耗时的操作 因为会导致主线程中系统代码晚执行   界面就会出现卡死现象严重影响用户体验度

2.不能在子线程中修改页面 要回到主线程中去修改

耗时操作有哪些:1.大量运算   2.处理大文件  3.网络相关  4.睡眠代码

开启线程的方式有三种:

1.NSThread:

    //开启子线程

    [NSThreaddetachNewThreadSelector:@selector(newThreadMethod:)toTarget:selfwithObject:@"abc"];

    //让当前线程睡眠的代码

    [NSThread sleepForTimeInterval:3];

    UIView *v = [[UIViewalloc]initWithFrame:CGRectMake(100, 100, 100, 100)];​

    v.backgroundColor = [UIColorredColor];

    [self.view addSubview:v];

-(void)newThreadMethod:(NSString *)s{

    for (int i=0; i<<span se-mark="1">10; i++) {

        [NSThreadsleepForTimeInterval:.5];

        NSLog(@"%@-%d",s,i);

        UIView *v = [[UIView alloc]initWithFrame:CGRectMake(100, i*50, 40, 40)];

        v.backgroundColor = [UIColorblueColor];

        //把修改页面的代码回到主线程中去执行

        [selfperformSelectorOnMainThread:@selector(updateUI:) withObject:v waitUntilDone:NO];

    }

}

-(void)updateUI:(UIView*)v{

     [self.view addSubview:v];

}

2.GCD: 中央任务分发  C语言支持  执行效率高 代码简洁

//线程队列:1.串行队列  2.并行队列

       //创建串行队列

    dispatch_queue_t myQueue = dispatch_queue_create("queue", NULL);

    //创建并行队列

    dispatch_queue_t myQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //开启一个线程在某个队列中

    dispatch_async(myQueue, ^{

        for (int i=0; i<<span se-mark="1">5; i++) {

            [NSThreadsleepForTimeInterval:.5];

            NSLog(@"a-%d",i);

            UIView *v = [[UIView alloc]initWithFrame:CGRectMake(100, i*50, 40, 40)];

            v.backgroundColor = [UIColorblueColor];

            //在主线程中执行某段代码

            dispatch_async(dispatch_get_main_queue(), ^{

                [self.view addSubview:v];

            });

        }

    });

  3.NSOperation:可以控制同时执行的线程数量  可以控制线程之间的关系  没有自有的返回主线程方法,可以用方法1的或2的;

一、创建子线程队列

    NSOperationQueue *queue = [[NSOperationQueuealloc]init];

//    获取主线程队列方式

//    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];

    //设置最大线程同时执行数量

    [queue setMaxConcurrentOperationCount:2];

    二、创建子线程

     //子线程创建方法一

    NSBlockOperation *op1 = [NSBlockOperationblockOperationWithBlock:^{

        for (int i=0; i<<span se-mark="1">5; i++) {

            [NSThreadsleepForTimeInterval:.5];

            NSLog(@"a-%d",i);

        }

    }];

    //子线程创建方法二

    NSInvocationOperation *op2 = [[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(run) object:nil];

    //设置线程间的关系

     [op1 addDependency:op2];

    三、把创建的子线程添加到子线程队列

    [queue addOperation:op1];

    [queue addOperation:op2];

    }

-(void)run{

    for (int i=0; i<<span se-mark="1">5; i++) {

        [NSThreadsleepForTimeInterval:.5];

        NSLog(@"b-%d",i);

    }

}

学习ios  重要还是要理清楚思路  在做或者看老师代码的时候 自己多想想为什么  不要自己看着就抄       另外还是要推荐一下 蓝懿IOS这个培训机构  和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!

                                                                  写博客第五十一天;

                                                                              QQ:565803433

0 0
原创粉丝点击