2018-02-26

  1. 小红点通知实现方案:

    • 给UITabBar做拓展;
    • 给UITabBarItem做拓展;
    • 使用系统提供的badge,要求系统最低为iOS 10。

      此处之前遇到了一个问题,小红点这块是我做的,但是当时没有考虑到系统版本要求,直接使用了iOS 10以后自带的tabBarItem.badge属性设置了小红点,这就导致了当用户为iOS 10以下系统时,GG。

      但是最后没有发现这个问题,手上没有iOS 10以下的设备,导致就成为了一个线上bug。同事的解决方案是给UITabBar做了分类,让我意外的是居然不是给UITabBarItem做分类,其实这样也行,但是让我更加意外的是,他并没有执行完所有的路径测试,导致当“我的审批”通知都结束后,并不能消除UITabBar上之前出现的小红点。

      我找出了原因,具体出错原因是因为同事居然写了两份功能代码,用UILabel渲染出了小红点,又用UIView再渲染了一次,不过UIView只做了backgroundView作用,给这个UIView做了tag标记,但让我感到非常奇怪的是,居然没有对UILabel做tag标记,导致最后for-in当前UITabBar.subviews时根本就没remove掉UILabel。最终我把无用的UIView删掉,把原先给UIView的tag赋值给了UILabel,遂解决。

  2. 重温OC中的“_”和“self.”

    • 比如people:
      我们可以用pe0ple和self.peole两种方式去访问people这个变量,而当使用实例变量也就是“”的方式去访问people时,只是拿到people本身而已,如果我们通过self.people的方式去获取,则是通过getter方法去拿到这个变量。

      说的再简单一些,如果假设我们给people赋值为8,那么通过_people去访问,只能拿到8,但是如果我们通过self.people去获取变量,实际上是访问了

      1
      2
      3
      - (NSInteger)getPeople {
      return _people
      }

      我们可以重写这个getter方法,想想看!这是一个我们可以自定义配置的方法!能做的事情就出来了!!!

      1
      2
      3
      4
      - (NSInteger)getPeople {
      _people = 10;
      return _people
      }

      emmm。总结来看,如果我们对这个变量毫无要求,完全可以通过“_”的方式去访问,如果我们对其有了二次定义的更多需求,比如对tableView的dataSource的setter方法中,数据源赋值过来了,可能会执行一次reload,此时我们就可以通过self.的方法使用这个变量,而引起其他变量的变化。

2018-02-27

  1. 公司昨天下午给实习生配了新电脑,做iOS的是17款MacBook Pro 15,导致所有环境都需要自己去重新搭建,其中遇到了一个比较尴尬的问题,昨天进行pod install失败的原因找到了,是因为当执行pod时会比对本地git账户生成的SSH key与远程是否一致,昨天并未上传本机生成的SSH key,进行下载是权限出错。😓。

  2. 关于cocoapods的一些详细内容,英语好的可以直接去官网,中文翻译的在这

  3. 关于动态库和静态库的一些解释和区别

  4. 获取一个view中的内容,return回一张图片。思路:系统会维护一个CGContextRef的栈,UIGraphicsGetCurrentContext()会取出栈顶的context

    • 在drewRect方法中调用UIGraphicsGetCurrentContext()
    • 不用drewRect默认自带提供的上下文,自己造一个上下文。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      // 自己造一个上下文
      // 此处的size为传入view的大小
      UIGraphicsBeginImageContextWithOptions(rect.size,YES,0);
      // 获取上下文
      CGContextRef context =UIGraphicsGetCurrentContext();
      //然后在context上绘画。。。
      // 画完后,获取这个上下文中绘制的内容,保存成UIImage
      UIImage *temp = UIGraphicsGetImageFromCurrentImageContext();
      // 关闭上下文
      UIGraphicsEndImageContext();
  5. 问题:
    分享完后的back回App,并未消失shareView。

  6. DiDi学院公开课:

    • 最开始滴滴只有出租车,快车业务因为发展太快了,直接copy了一份代码
    • 一条业务线完成后,另外一条还未完成,修改了公共处代码,导致前一条失败
    • 平台型架构。微信、天猫、淘宝。
    • 各个业务线的团队成员要保证自身业务线的快速迭代,平台团队,要做一个支撑
    • 最初三步走:
      平台化——TheOne
      组件化——乘客端5.0,司机端5.0
      动态化——热修复,插件化,Hybrid

2018-02-28

  1. 今天遇到了一个大问题,在某个时间段重新build工程后,发现Swarm提出了没有找到“语言服务”!当时都惊了,之前在Swarm里从未提出要求寻找对应的“语言服务”,这莫名的来了一出。刚开始还以为是Swarm上出了问题,先去找Swarm的开发团队负责人,尬聊了好一会儿,他一直以为是我这边配置少了什么东西,不过确实是,因为Swarm的断言截获了错误,弄了一会儿,发现这个问题貌似是“小笑脸”的版本号更新出错,就把这个问题丢给了AfantySDK的开发团队,人家说,“对,这是0.6.8版本的一个bug,我们稍后会打一个tag解决这个问题”,woc,当时我的心情!!!一个中午都在为这个事情脑热中,以为是自己的操作不当。

2018-02-29

  1. 修改了UITabBar。主要是只通过tag的方式清除掉了一个View,但实际上Label才是重点。(周一只是看懂了同事写的逻辑,和review他之前写的所有代码。🙂)

  2. 添加了Load菊花,为首页和发现页面的载入提升了用户体验。有一种想法,DiDi内部有一个ONEUIKit的统一UI组件,之前没发现这个问题,早知道就不用SVProgressHUD了。也就从今天开始,开始有了一种冲动,去阅读DiDi内部的这些组件,感觉写的非常不错。

  3. cancelPreviousPerformRequestsWithTarget方法用于取消performSelector指定方法。

  4. setNeedsDisplay和setNeedsLayout的区别

2018-03-01

2018-03-02

这两天基本上都在对之前同事写的代码进行高层封装,JIRA上要求对分享相关组件暴露成API的方式,供今后走JSBridge做准备,所以完成了一行代码调起分享页面。😝。等等还有一些其它的优化。