小编del*_*rux的帖子

CADisplayLink和drawRect

我需要帮助才能更好地理解行为方式CADisplayLinkdrawRect行为,以便我能够弄清楚如何将应用程序的帧速率保持在平滑的60fps.到目前为止,我(可能是不正确的)理解如下:

1)CADisplayLink当显示刷新时调用指定的选择器(所谓的"v-sync"事件;大约每16ms).

2)iOS使用双缓冲,这意味着当显示一个帧缓冲区时,我们可以准备(绘制)另一个,并在下一个v-sync事件中交换两个.

3)因此,从显示链接触发时起,我有大约16ms的时间来确保完成下一帧所需的所有计算和绘图,以便在交换缓冲区和屏幕刷新时一切准备就绪.

4)自定义UIView的drawRect方法绘制到后台缓冲区,因此在drawRect调用方法后,在下一个v-sync事件中显示任何自定义绘图.

这是真的有效吗?(如果下一个v-sync事件发生在我完成绘制到后台缓冲区之前会发生什么?)

然后,我应该如何使用CADisplayLink重绘自定义UIViews?我试图setNeedsDisplay在显示链接触发时调用,但是在drawRect方法实际开始之前有一个延迟:

2014-12-10 19:17:21.000 myApp[39487:60b] Display link fired.
2014-12-10 19:17:21.001 myApp[39487:60b] Sending setNeedsDisplay
2014-12-10 19:17:21.012 myApp[39487:60b] drawRect beginning
2014-12-10 19:17:21.013 myApp[39487:60b] drawRect finished
2014-12-10 19:17:21.017 myApp[39487:60b] Display link fired.
2014-12-10 19:17:21.018 myApp[39487:60b] Sending setNeedsDisplay
2014-12-10 19:17:21.029 myApp[39487:60b] drawRect beginning
2014-12-10 19:17:21.031 myApp[39487:60b] drawRect finished
2014-12-10 19:17:21.033 myApp[39487:60b] Display link fired.
Run Code Online (Sandbox Code Playgroud)

这是一个非常简化的示例,在该drawRect方法中几乎没有绘图.我的一些更复杂的drawRect可能需要10毫秒才能完成.但是drawRect开始和下一次显示刷新之间只有5ms !另外,在显示链接触发和drawRect开始之间显然有"浪费"了整整一毫秒!我该如何利用那段时间?

如果我尝试drawRect直接在显示链接选择器中调用,我得到这样的东西:

2014-12-10 19:24:41.000 myApp[39495:60b] Display …
Run Code Online (Sandbox Code Playgroud)

objective-c uiview drawrect ios cadisplaylink

6
推荐指数
0
解决办法
788
查看次数

git 未检测到跟踪文件中的单位错误

我最近在 Git 存储库中包含的二进制文件中发现了一个单位错误:

\n
$ diff <(xxd old-clone/file) <(xxd new-clone/file)\n< 00251230: 0412 c2bd 2e61 efeb 21b4 d904 3388 2539\n---\n> 00251230: 0412 c0bd 2e61 efeb 21b4 d904 3388 2539\n
Run Code Online (Sandbox Code Playgroud)\n

令人担忧的是,git 没有发现任何问题。我之所以发现这个问题,是因为我们的一项测试神秘地开始失败,并且没有任何提交的更改。

\n

当我从服务器对存储库进行新克隆时,测试再次通过。我现在遇到的情况是,我有两个存储库副本,两者都在同一提交中签出,并且都报告了一个干净的工作树,但该文件的版本明显不同:

\n
$ cd old-clone && git status && cd ..\nHEAD detached at 251265a4\nnothing to commit, working tree clean\n$ cd new-clone && git status && cd ..\nHEAD detached at 251265a4\nnothing to commit, working tree clean\n$ diff old-clone/file new-clone/file\nBinary files old-clone/file and new-clone/file differ\n
Run Code Online (Sandbox Code Playgroud)\n

我已确认:

\n …

git

5
推荐指数
1
解决办法
183
查看次数

标签 统计

cadisplaylink ×1

drawrect ×1

git ×1

ios ×1

objective-c ×1

uiview ×1