重要的代码片段

objc中标识类、方法或属性过期宏

DEPRECATED_ATTRIBUTE

DEPRECATED_ATTRIBUTE
/// apns路由器
@interface XTXMessageRouter : NSObject
- (id)init __attribute__((unavailable("init not available, call initWithUrl: instead")));
/// 初始化
- (instancetype)initWithUrl:(NSString *)urlStr;
/// 执行跳转
- (void)go DEPRECATED_ATTRIBUTE;

updateViewConstraints

此函数是从iOS6.0开始在ViewController中新增一个更新约束布局的方法,这个方法默认的实现是调用对应View的 updateConstraints 。ViewController的View在更新视图布局时,会先调用ViewController的updateViewConstraints 方法。我们可以通过重写这个方法去更新当前****View****的内部布局,而不用再继承这个****View****去重写****-updateConstraints****方法。我们在重写这个方法时,务必要调用**** super ****或者**** ****调用当前****View****的**** -updateConstraints ****方法。

controller :

#pragma mark - system
- (void)updateViewConstraints {

    WS(weakSelf)

    [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.equalTo(weakSelf.view);
    }];

    [super updateViewConstraints];
}

view :

- (void)updateConstraints {

    WS(weakSelf)
    [self.mainTableView mas_makeConstraints:^(MASConstraintMaker *make) {

        make.edges.equalTo(weakSelf);
    }];
    [super updateConstraints];
}

dispatch_main_async_safe

注意这里判断的是队列而不是线程

#ifndef dispatch_main_async_safe
#define dispatch_main_async_safe(block)\
    if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {\
        block();\
    } else {\
        dispatch_async(dispatch_get_main_queue(), block);\
    }
#endif

你可能感兴趣的:(重要的代码片段)