我们有一个混合的Obj-C/Swift项目。 Swift编译需要非常长的时间。需要很长时间编译的Swift函数
我使用以下来构建项目并收集函数时序。
xcodebuild -workspace Pay.xcworkspace -scheme Pay clean build OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | grep .[0-9]ms > build.log
如果我再排序使用sort -nr
这个文件,我与功能的文件,从最高到最低排序的建立时间。
例如,使用的Xcode 8.3.2并给予下述的功能:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let scrollDiff = scrollView.contentOffset.y - self.previousScrollOffset
let absoluteTop: CGFloat = 0;
let absoluteBottom: CGFloat = scrollView.contentSize.height - scrollView.frame.size.height;
let isScrollingUp = scrollDiff > 0 && scrollView.contentOffset.y > absoluteTop
let isScrollingDown = scrollDiff < 0 && scrollView.contentOffset.y < absoluteBottom
if !successView.isHidden && canAnimateHeader(scrollView) {
// Calculate new top constraint
var newTopConstraint = self.headerTopConstraint.constant
if isScrollingDown && scrollView.scrolledToTop {
newTopConstraint = -(max(self.minHeaderHeight, abs(self.headerTopConstraint.constant) - abs(scrollDiff)))
} else if isScrollingUp {
newTopConstraint = -(min(self.maxHeaderHeight, abs(self.headerTopConstraint.constant) + abs(scrollDiff)))
}
// Header needs to animate
if abs(newTopConstraint) != abs(self.headerTopConstraint.constant) {
self.headerTopConstraint.constant = newTopConstraint
self.updateHeader()
self.setScrollPosition(self.previousScrollOffset)
}
self.previousScrollOffset = scrollView.contentOffset.y
}
}
此定时在560ms为编译。
认为它可能是一个类型推断问题,我宣布了scrollDiff(CGFloat)和isScrollingUp/isScrollingDown(Bool)的类型。
将编译时间缩短到485ms。
我想不出还有什么可能导致很长的编译时间。我们有许多功能,所有时间都在1ms以上,有些显着高于上面的例子。
我会很感激任何人可能有的指针。
绝对可能不需要那么多首先。最大和最小工作与浮游物 – PeejWeej