美文网首页
iOS经典博客

iOS经典博客

作者: upworld | 来源:发表于2018-08-01 17:05 被阅读7次

    1,刨根问底 self super

    知识点
    1,super 结构体

    struct objc_super {
       __unsafe_unretained id receiver;
       __unsafe_unretained Class super_class;
    };
    

    2,class 默认实现

    - (Class)class {  
        return object_getClass(self);  
    }  
    

    3,重写class 调用类方法不会递归

    @implementation Father
    - (Class)class{
        return [Father class];
    }
    @end
    

    2,Run Loop 记录与源码注释

    Run Loop 知识点
    1,CFRunLoopPerformBlock,如果符合当前运行模式,则下一个运行时运行
    2,如果运行模式不一致,不会强制切换模式,会等到下一个模式促发的运行

      kCFRunLoopDefaultMode 模式下执行CFRunLoopPerformBlock,会一致等UITrackingRunLoopMode促发才执行下面代码
        CFRunLoopPerformBlock(CFRunLoopGetCurrent(), (CFStringRef)UITrackingRunLoopMode, ^{
            [self test];
        });
    
    - (void)test{
        if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
            NSLog(@"cjw cjw isMainQueue");
        }
    }
    

    3,isEqual & hash

    1,isEqual 需要重写
    2,hash 需要重写

    4,MainQueue or MainThread

    1,主队列(MainQueue)里面block 一定都在主线程执行。
    GCD中将任务提交到主线程的主队列即dispatch_get_main_queue()时,这里的任务是由RunLoop负责执行。RunLoop和线程绑定。所以上面结论没毛病。

    试试下面代码
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"cjw cjw %@",[NSThread currentThread]);
    dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"cjw cjw %@",[NSThread currentThread]);
    });
    });
    

    2,主线程(MainThread)不一定都在MainQueue里面执行

    下面这段代码说明MainThread可以在其他Queue里面执行
      dispatch_queue_t queue = dispatch_queue_create("testQueue", DISPATCH_QUEUE_SERIAL);
      dispatch_sync(queue, ^{
          if ([NSThread isMainThread]) {
              NSLog(@"cjw cjw is mainthread");
          }
          if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {
              NSLog(@"cjw cjw isMainQueue");
          }
      });
    

    相关文章

      网友评论

          本文标题:iOS经典博客

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