获得徽章 5
- 120
- #iOS知识小集#「 聊聊 load 与 __attribute__ 」
通常为了解耦或者其它目的,我们往往在 +(void)load方法做一些服务的启动或者利用运行时做方法的替换等。可以添加环境变量 OBJC_PRINT_LOAD_METHODS=YES打印 load 方法调用的顺序。如下:
......
objc[159]: LOAD: +[_NSConstantNumberBool load]
objc[159]: LOAD: +[_NSConstantData load]
objc[159]: LOAD: +[_NSConstantDate load]
objc[159]: LOAD: +[_NSConstantDictionary load]
objc[159]: LOAD: class 'Annotation' scheduled for +load
objc[159]: LOAD: +[Annotation load]
load方法是在类被加入运行时中执行的,根据下面的源码即可知道+(void)load方法被调用的顺序:父类 > 类 > 分类1、分类2(分类之间的顺序是由编译顺序决定的):
除了 load 方法之外,我们可以使用编译时的特性来做初始化的服务,比如下面的例子,下面这些方法会在main函数执行前调用,而且可以控制函数的执行顺序,对模块化用来解耦是一个不错的方案:
// main 函数开始执行时调用
// 执行顺序为 before101,before102,before103
__attribute__((constructor(101)))
void before101() {
NSLog(@"before101");
}
__attribute__((constructor(103)))
void before103() {
NSLog(@"before103");
}
__attribute__((constructor(102)))
void before102() {
NSLog(@"before102");
}
详情可查看:github.com
展开评论5 - 今年年初,知乎大V出走的行动再次上演。但这次不是平台挖角,而是大V主动选择。在一场知乎饭局中,大V兔撕鸡称:“知乎太小家子气,没海纳百川的胸怀,也没想过树立大量头牌。”33
- 网络请求方法需要考虑:语义、协议、公共参数、数据格式、编码解码、异步、跨域、cookie、异常处理、数据上报、progess/loading、abort、timeout、安全(风控、加密等)、登录态校验、同构等等。
其中最困难的就是协议,因为其它的基本都可以靠前端自行解决,而协议是前端与服务端对数据格式的一套约定,这种约定往往很难统一标准。比如最简单的一些规则:更适合用 get 就不要 post,get 参数从 query 里取,post 参数从 data 里取……常常都不是统一的,更何况返回的数据格式用什么表示正常,用什么表示异常,用什么表示“正常的异常”,可能就更难统一了。之所以“约定大于配置”是一条黄金定律,是因为大家都知道好并且往往没做到。
一种理想的返回格式:
{
code: 0 // 0 表示正常;负数表示异常;正数表示正常的异常
message:'' // 可以透传展示给用户的提示信息
data: {} // json 格式的数据,异常情况最好返回 '' 或 null
error: '' // 服务端捕获的错误信息
}展开431 - 不知不觉带团队已经快两年了,很多之前工作的思路也在渐渐发生转变。先分享几条个人觉得比较有意思的给大家体会下:
之前:
1. 技术牛逼就最牛逼;
2. 所以一定要做团队里技术最牛逼的人;
3. 少说话,多做事,付出总会有回报;
4. 今年我要学 XXX,然后做点牛逼的开源项目!写点牛逼的博客!
5. 我写的这个东西大家都觉得很好用!
6. 这次重构太牛逼了,我自己加班也要把他弄好!
7. 怎么最近业务越来越多了,没时间学技术了啊,听说头条技术氛围不错,去看看?
之后:
1. 技术牛逼还是牛逼,但是还能在业务中落地就更牛逼了;
2. 怎么样才能让小伙伴们技术更牛逼?让他们做的牛逼的东西有更多人用?对业务产生的价值最大化?
3. 产品你们的 PRD 写得也太烂了,这样的需求我们没法做啊!不好意思测试小姐姐,我们后面一定加强自测!
4. XXX 不错,让大家有时间都学学,然后一起搞点事情!
5. 你写的这个东西真的很不错啊!不过一定要先把日志打起来,晋升的时候就有数据了!
6. 你这次重构要花多少人日,有没有更高优先级的技术任务?
7. 怎么最近业务越来越多了,小伙伴们好像都有点情绪,得想办法给他们争取点时间做技术。展开20108 - 来自 GitHubDaily 的安利--nsfw_data_scrapper 是一份开源的 NSFW 图像数据集,你可以拿那些图像来测试或训练你的检测系统(如鉴黄系统)。另外,正如标题所言,项目的图像数据是 Not Safe/Suitable For Work 的,所以你最好不要在上班的时候打开 raw_data 文件夹里的那些图片。GitHub 地址:
github.com
展开19 - 评论27