投入时间开发工具 - Sketch 插件开发

善于思考 非常喜欢下边这句话: "You can have excuses or results. Not both." "你可以拥有结果或借口,但不能两者兼得。" ‘懒惰’ 也可以说是技术人员重要的优良品格之一;工作中需要不断的思考,编写一些工具或者改变一些既定的流程, 来完成不喜欢的任务、来避免一些经常犯的错误,以便有更多的时间来去做更多事情,让自己看起来没那么忙碌; 特别是在越大的团队中,投入有效的工具平台等开发时间带来的效果也会更明显; 来找找灵感 到底我们可以开发哪些工具,做哪些事情? 简单列一些之前沉淀的 »

从零开始写下拉上拉刷新控件-思考、设计、实现

前言 一直以来,由于业务的高速发展,Alibaba.com网站的买家、卖家和友办三个App iOS端的下拉上拉等UI控件并没有完全统一,本着打造精品化App的理念,最近刚开发完成了统一的、可以适配三个App端的下拉上拉刷新控件ASCPullToRefresh,效果Demo如下: 下拉刷新 上拉加载 接下来,从思考、设计、实现三个阶段,回顾一下整个开发过程~ 思考 为什么造轮子 首先是为什么,为什么要从零开始全新写一个下拉上拉的控件? 确实,目前GitHub上开源的下拉上拉刷新控件非常多,Star数量多的、常用的如: »

ViewController中的UIView Property要设置为weak还是strong

众所周知,从IB中拖出来的outlet Xcode会默认设置为weak,那么代码new出来并且addSubview到self.view的view,我们在property里要设置为strong还是weak呢。 Weak or Strong? 假设一个ViewController的self.view中有一个Label,那么他们三者的关系是: self.view--strong-->Label" /> 可以看到Label的所有者其实是self.view,正常来说一个对象只有一个所有者,如果再将ViewController中的Label引用声明为strong,那么当label从self.view中移除后,label将不会销毁,造成View的冗余。 于是我们愉快地把Label声明为weak,但是在初始化label的时候,Xcode又猝不及防地扔给我们一个warning。 »

做一个懂运营的极客

背景 在大部分开发工程师眼里,认为换 开机广告图 是件极其简单的工作,按照规定的尺寸,在管理后台配上 Banner 图和跳转 URL Scheme 就能完成的事情,就这样,在互联网时代,运营的工作边界就变得越来越模糊,很多时候,我们甚至会认为,运营的工作就是做一些很琐碎的事情。 很难怪大家有这样的认知,各种类型的、某个阶段的互联网公司,都伴随着不同文化,例如:Google是技术驱动、腾讯是产品驱动、早期创业公司是概念驱动。 »

KVOController开源库bug分析

FBKVOController是一个对KVO机制简单封装的开源库,最大特点就是持有了observer与observe object及其keyPath的关系,利用delloc自动移除observer,同时提供了便捷的block方式去处理观察对象keyPath值的变化,省去了NSKeyValueObserving协议中原生API的麻烦。 看起来很棒!但,它并非完美。 问题 举个例子,当需要观察自身keyPath值变化时 使用KVO原生API在init中添加Observer,并在dealloc中移除Observer,代码如下: - (instancetype)init { self = [super init]; if (self) { [self addObserver:self »