重要的代码片段
程序员文章站
2022-07-13 12:27:48
...
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
转载于:https://www.jianshu.com/p/6d70a9e74bb5