gpt4 book ai didi

watchkit - 对于 Watch Complication 和 Time Travel,getTimelineEntriesForComplication 被(太)经常调用

转载 作者:行者123 更新时间:2023-12-04 03:20:38 28 4
gpt4 key购买 nike

根据下面的数据,ClockKit 会生成一次 future 的 CLKComplicationTimelineEntry 项,但对于过去的时间点,会进行 24 次调用!这是为什么?

更多详情:

我注意到我的 Apple Watch 复杂功能出现了奇怪的行为。

它支持时间旅行——我提供过去 1 天和 future 4 天的数据。我目前正在努力成为一名好公民,并减少调用来重新生成我的并发症数据。

为了了解某些调用的频率,我在 getTimelineEntries(for:before:limit:withHandler:) 中放置了一个简单的 print getTimelineEntries(for:after:limit:withHandler:) 输出 before/after 参数。

当我在模拟器中启动 App/Complication 时,我得到以下输出:

generate future timeline entries (after date:2016-07-23 10:33:31 +0000)
generate past timeline entries (before date:2016-07-23 10:33:31 +0000)
generate past timeline entries (before date:2016-07-23 09:33:31 +0000)
generate past timeline entries (before date:2016-07-23 08:33:31 +0000)
generate past timeline entries (before date:2016-07-23 07:33:31 +0000)
generate past timeline entries (before date:2016-07-23 06:33:31 +0000)
generate past timeline entries (before date:2016-07-23 05:33:31 +0000)
generate past timeline entries (before date:2016-07-23 04:33:31 +0000)
generate past timeline entries (before date:2016-07-23 03:33:31 +0000)
generate past timeline entries (before date:2016-07-23 02:33:31 +0000)
generate past timeline entries (before date:2016-07-23 01:33:31 +0000)
generate past timeline entries (before date:2016-07-23 00:33:31 +0000)
generate past timeline entries (before date:2016-07-22 23:33:31 +0000)
generate past timeline entries (before date:2016-07-22 22:33:31 +0000)
generate past timeline entries (before date:2016-07-22 21:33:31 +0000)
generate past timeline entries (before date:2016-07-22 20:33:31 +0000)
generate past timeline entries (before date:2016-07-22 19:33:31 +0000)
generate past timeline entries (before date:2016-07-22 18:33:31 +0000)
generate past timeline entries (before date:2016-07-22 17:33:31 +0000)
generate past timeline entries (before date:2016-07-22 16:33:31 +0000)
generate past timeline entries (before date:2016-07-22 15:33:31 +0000)
generate past timeline entries (before date:2016-07-22 14:33:31 +0000)
generate past timeline entries (before date:2016-07-22 13:33:31 +0000)
generate past timeline entries (before date:2016-07-22 12:33:31 +0000)
generate past timeline entries (before date:2016-07-22 11:33:31 +0000)

最佳答案

没有规定您的数据源方法只会被调用一次。您只需要准备好处理请求。

为什么它处理过去条目的方式与处理 future 条目的方式不同?

我相信这是一项优化,旨在优先考虑即将到来的时间线条目(而不是最近的过去条目)。

回到 watchOS 2.0.1,并发症服务器首先用 future 的条目填充时间线,然后继续 backfill the timeline with past entries .这当然是可以理解的,Apple 可能会选择对过去的条目进行批处理,以优先考虑较新的条目而不是较远的条目。

虽然 Apple 从那时起肯定已经调整了其代码,但可能在当前版本的 watchOS 中继续应用相同级别的关注和细节。

如果我要完成一项昂贵的操作怎么办?

如果您需要做的不仅仅是简单地使用手头现有的复杂数据,并且您的数据检索与系统发出的特定请求相关联,则您应该重构该代码以将其移出该方法。

一般来说,您希望手头有预取数据,可以直接将其转换为时间线条目。

这在 watchOS 3 中变得更加重要,当你是 not merely updating a complication ,还会在后台更新您的应用程序。即使您现在仍然需要支持 watchOS 2,您也应该设计如何获取数据和更新复杂功能,以考虑 watchOS 3 如何完成更新您的整个应用程序。

为什么它不止一次调用我的数据源方法?

Apple 使用多种技术来优化复杂服务器(或操作系统的其他部分)的工作方式。您所能做的就是相信系统经过调整以减少其内存和能源使用,并且它这样做是有充分理由的。

这实际上已经成为多年的标准做法,并且在 UITableViewDataSource 中很常见,其中像 numberOfSectionsInTableView might be called several times 这样的方法.

正如另一位发帖人所写,方法被调用的次数 can change between different versions of the OS .

如果是错误怎么办?

它可能会按预期工作,但如果您认为这是一个错误,您可以创建一个最小的示例项目并使用 bug report to Apple 提交它.

关于时间旅行的无关笔记

我注意到您想提供 4 天的 future 时间旅行条目。这将超过时间旅行滑动窗口。

为了效率起见,您可能需要考虑latestTimeTravelDate :

When constructing your timeline, do not create any entries after this date. Doing so is a waste of time because those entries will not be displayed right away.

关于watchkit - 对于 Watch Complication 和 Time Travel,getTimelineEntriesForComplication 被(太)经常调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540958/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com