美文网首页
OC源码分析-Runtime源码分析(二)

OC源码分析-Runtime源码分析(二)

作者: TianTianBaby223 | 来源:发表于2019-01-22 16:17 被阅读4次

    一 位运算技巧

    在设计枚举的时候 ,可以传多值

    //typedef enum {
    //    MJOptionsOne = 1,   // 0b0001
    //    MJOptionsTwo = 2,   // 0b0010
    //    MJOptionsThree = 4, // 0b0100
    //    MJOptionsFour = 8   // 0b1000
    //} MJOptions;
    
    typedef enum {
    //    MJOptionsNone = 0,    // 0b0000
        MJOptionsOne = 1<<0,   // 0b0001
        MJOptionsTwo = 1<<1,   // 0b0010
        MJOptionsThree = 1<<2, // 0b0100
        MJOptionsFour = 1<<3   // 0b1000
    } MJOptions;
    
    
    - (void)setOptions:(MJOptions)options
    {
        if (options & MJOptionsOne) {
            NSLog(@"包含了MJOptionsOne");
        }
        
        if (options & MJOptionsTwo) {
            NSLog(@"包含了MJOptionsTwo");
        }
        
        if (options & MJOptionsThree) {
            NSLog(@"包含了MJOptionsThree");
        }
        
        if (options & MJOptionsFour) {
            NSLog(@"包含了MJOptionsFour");
        }
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    //    [self performSelector:@selector(test)];
    //    
    //    [person performSelector:@selector(test)];
        
        [self setOptions: MJOptionsOne | MJOptionsFour];
      [self setOptions: MJOptionsOne + MJOptionsTwo + MJOptionsFour];
    //    
    //    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin;
    //
    //    NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
    //
    //    [self addObserver:self forKeyPath:@"age" options:options context:NULL];
    }
    

    二 : 细节

    isa指针 含义


    源码结构

    如果没有c++析构函数,或者关联对象,将不会做下面框框内的操作,释放更快

    三 : class 结构解析

    内存结构

    class_rw_t下面部分细节


    class_ro_t


    四 : method _t

    五 : 方法缓存

    image.png

    六 :缓存原理-散列表

    相关文章

      网友评论

          本文标题:OC源码分析-Runtime源码分析(二)

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