240 发简信
IP属地:广东
  • 120
    iOS libdispatch浅析

    前言 本文分析源码为libdispatch-1173.40.5,主要分析常用的dispatch API具体的实现原理;先讲解下常用的数据结构体便于后续分析使用:dispatc...

  • GCDWebServer也可以实现实时web输出日志,XLFacility也可以,他们有什么区别

    iOS 日志分析

    源于iOS App开发时,控制台日志混乱,不便于分析的需要,产生了这篇文章。 基础票 说说NSLog 调用NSLogv => Logs an error message to...

  • 顶点颜色值是怎么表示的,rgb?1.f,0.f表示是什么

    OpenGL ES GLKit三角形变换

    效果图如下: 首先,使用GLKit绘制图形分为以下两个步骤 初始化上下文 使用GLKBaseEffect渲染图形 初始化上下文 新建OpenGL ES上下文,EAGLCont...

  • fromValue和byValue是非零。 插值(也就是动画执行)从fromValue到toValue,亲测

    iOS动画之CABasicAnimation

    我们首先来看看Core Animation类的继承关系图 示例 从苹果官方API我们可以了解到CABasicAnimation(基础动画)算是CAKeyframeAnimat...

  • 想知道。yymodel为啥性能高,处理这块的代码在哪里

    YYModel 源码剖析:关注性能

    系列文章:YYText 源码剖析:CoreText 与异步绘制YYAsyncLayer 源码剖析:异步绘制YYCache 源码剖析:一览亮点YYModel 源码剖析:关注性能...

  • 将runloop的理解都写到这里

    项目代码 runloopDemo CFCoreFoundation源码 目录 从主线程runloop啥时候开启 runloop对象是怎么存储的 runloop怎么跑起来的,又...

  • 当调用 performSelector:onThread: 时,实际上其会创建一个 Timer 加到对应的线程去
    怎么证明这句话呢

    RunLoop与PerformSelector

    PerformSelecter 当调用 NSObject 的 performSelecter:afterDelay: 后,实际上其内部会创建一个 Timer 并添加到当前线程...

  • [CATransaction begin];
    [CATransaction setCompletionBlock:^{

    }];
    这两句的作用是什么

    浅谈TableView的begin Updates和end Updates

    实现效果如下 通过tableView的reloadData方法我们可以方便的对tableVie的cell根据数据源进行刷新。但是这种刷新方法在某些时候也不是那么合适。比如只需...

  • 那这时候等待是自旋还是休眠

    iOS 信号量机制

    信号量机制 在 iOS 系统及大部分现代操作系统中,多个线程可以并发执行,CPU在线程之间来回切换,共享某些资源,提高了资源的利用率。但是我们该如何处理各个线程之间的相互制约...

  • iOS PerformSelector面试题总结

    最近在面试的过程中才发现太多没有注意的细节,每一个问题问到最后都是在怀疑人生中度过... 正好趁着工作敲定了之后将performSelector相关的细节总结一番。 基础用法...

  • 看错,用weakself没有这个问题

    Block中strongSelf的使用

    Block中strongSelf的使用 1.weakSelf与其缺陷 这里会有两种情况: 若从A push到B,10s之内没有pop回A的话,B中block会执行打印出来11...

个人介绍
天道酬勤,守正出奇