随记

作者: 鸣人998 | 来源:发表于2016-02-16 11:52 被阅读11次

    __block和__weak修饰符的区别其实是挺明显的:

    1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

    2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

    3.__block对象可以在block中被重新赋值,__weak不可以。


    子线程里面加入NSTimer 的时候需要 手动添加NSRunloop  否则不能循环。

    单利里面添加 NSMutableArray 的时候,防止多个地方对它同时便利和修改的话,需要加原子属性。并且用strong,,,并且写一个遍历和修改的方法。加上锁。  Lock  UnLock

    __weak ViewController*  weakSelf = self;   

    GCD里面用 __weak 防止内存释放不了,循环引用。


    dispatch_group_async的使用

    dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, queue, ^{

    [NSThread sleepForTimeInterval:1];

    NSLog(@"group1");

    });

    dispatch_group_async(group, queue, ^{

    [NSThread sleepForTimeInterval:2];

    NSLog(@"group2");

    });

    dispatch_group_async(group, queue, ^{

    [NSThread sleepForTimeInterval:3];

    NSLog(@"group3");

    });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{

    NSLog(@"updateUi");

    });

    dispatch_release(group);

    每个一秒打印一个,当第三个任务执行后,upadteUi被打印。


    dispatch_barrier_async的使用

    dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

    相关文章

      网友评论

          本文标题:随记

          本文链接:https://www.haomeiwen.com/subject/ykbpkttx.html