Tag: 性能

iOS / Core-Animation:性能调优

我有我的应用程序在我的iPad上运行。 但performance非常糟糕 – 我低于15fps。 任何人都可以帮助我优化? 它基本上是一个包含12个button(从UIControl派生)的轮子(派生自UIView)。 当用户旋转它时,button会dynamic扩展和收缩(例如12点钟位置的那个应该总是最大的) 所以我的车轮包含一个: – (void) displayLinkIsCallingBack: (CADisplayLink *) dispLink { : // using CATransaction like this goes from 14fps to 19fps [CATransaction begin]; [CATransaction setDisableActions: YES]; // NEG, as coord system is flipped/fucked self.transform = CGAffineTransformMakeRotation(-thetaWheel); [CATransaction commit]; if (BLA) [self rotateNotch: direction]; } …从最近的触摸input计算轮子的新的旋转。 已经有一个性能问题,我正在寻找一个单独的线程: iOS Core-Animation:CATransaction / Interpolating变换matrix的性能问题 […]

通过触摸Swift来检测应用程序何时处于活动状态或不活动状态

什么代码可以用来检测用户何时与应用程序进行交互,以及用户何时不与应用程序进行交互? 目前,我有一个ViewController与UIView接收触摸覆盖触摸,也通过接收平移手势和轻敲手势。 这个问题的解决scheme需要与当前的手势分开,或者坐在这些手势之上。 是否有一个手势识别器,可以告诉我的应用何时收到手势,什么时候没有收到手势? 当应用程序处于活动状态时,是否有一种方法可以监视应用程序是否正在接收触摸,何时不触摸并根据需要调用某个function,例如: func appActive(){ print("App received input from a touch, tap, swipe, long press etc.") } func appInactive(){ print("App stopped receiving any input.") } 谢谢。

如何简单地等待iOS中的任何布局?

在开始之前请注意,这与后台处理无关。 没有涉及到背景的“计算”。 只有UIKit 。 view.addItemsA() view.addItemsB() view.addItemsC() 让我们来说一个6s的iPhone 这些都需要一秒钟的UIKit来构build。 这将发生: 他们全部都在一起。 重复一遍,UIKit执行大量工作时,屏幕只会挂起3秒钟。 然后他们都立即出现。 但是让我们说我想要这样的事情发生: 他们看起来不断进步。 屏幕挂起1秒,而UIKitbuild立一个。 它出现。 它再次挂起,而build立下一个。 它出现。 等等。 (注意“一秒钟”只是一个简单的例子,为了更清楚起见,请看这篇文章的最后一个例子。) 你如何在iOS中做到这一点? 你可以尝试以下。 这似乎并不奏效 。 view.addItemsA() view.setNeedsDisplay() view.layoutIfNeeded() view.addItemsB() 你可以试试这个: view.addItemsA() view.setNeedsDisplay() view.layoutIfNeeded()_b() delay(0.1) { self._b() } } func _b() { view.addItemsB() view.setNeedsDisplay() view.layoutIfNeeded() delay(0.1) { self._c() }… 请注意,如果值太小 – 这种方法很简单,显然,什么都不做 。 UIKit将继续工作。 (还有什么呢?) 如果价值太大,这是毫无意义的。 […]

如何提高UIWebView滚动性能?

我正在构build一个包含UIWebView的应用程序,其中包含大量的图像,CSS,embedded式video和JavaScript轻触处理程序。 滚动性能很差,我正在寻找最有效的方法来改善这种情况。 如果以下任何一个特性导致UIWebView滚动滞后? 还有什么其他因素可能会阻碍performance? 图片数量 我应该从用户滚动过去的时候从DOM中删除图像,如果他们向后滚动,将它们添加回来? 图像的大小 视网膜视图中的视网膜质量的图像会影响滚动性能比小版本更多吗? 图像缩放 提前调整图像大小会产生很大的影响,而不是依靠Web视图来根据width: 100%;声明进行缩放width: 100%; ? CSS 我已经避免了box-shadow ,但是还有其他一些CSS属性是否会对滚动性能产生负面影响? 如果有任何其他资源或工具可用于分析,我很乐意听到他们的消息。

我怎么能比CGContextStrokePath更快地渲染线?

我正在绘制使用CGContextStrokePath的graphics〜768点。 问题是每一秒我都会得到一个新的数据点,从而重新绘制graphics。 目前,这已经是一个繁忙的应用程序占用50%的CPU。 graphics绘制是在UIView的drawRect中完成的。 该图是基于时间的,所以新的数据点总是到达右侧。 我正在考虑一些替代方法: 用GLKit绘图(以不支持旧设备为代价),看起来像很多工作。 做一些屏幕抓取(renderInContext?),向左移1px,blit,只为最后两个数据点绘制一条线。 有一个非常广泛的CALayer和泛沿? 平滑的数据集,但这感觉就像作弊:) 这也有可能是我错过了一些明显的东西,我看到这样糟糕的performance? CGContextBeginPath(context); CGContextSetLineWidth(context, 2.0); UIColor *color = [UIColor whiteColor]; CGContextSetStrokeColorWithColor(context, [color CGColor]); … CGContextAddLines(context, points, index); CGContextMoveToPoint(context, startPoint.x, startPoint.y); CGContextClosePath(context); CGContextStrokePath(context);

PhoneGap与jQuery Mobile性能问题的常见来源是什么?

我有一个使用PhoneGap 1.0和jQuery Mobile 1.0b2在iPhone和iPad上运行的应用程序。 自从我开始使用这个框架以来,我一直被性能问题困扰在应用程序中的“页面”之间切换。 在按下button之后,在转换发生之前会有一个很好的第二次暂停,有时会更长一些。 我已经尝试了所有的webkit的调整,甚至在两个框架(我开始使用Phongap 0.95和jQuery Mobile Alpha 4)等待升级,这个问题还没有解决。 我使用尽可能多的“内置”对象(而不是自定义button图像),并在每个屏幕上使用自己的PNG背景。 应用程序本身只包含3个页面,外加一个用作选项屏幕的页面。 我不想寻找一个特定的解决scheme,而是想知道在使用PhoneGap和jQuery Mobile for iOS时性能存在的一些常见问题? 这样,其他人可以在处理自己的问题时寻找选项清单

低功耗蓝牙 – 重复更新特征值

电气工程Stackexchange后续问题 我想在很短的时间内重复写入一个蓝牙低功耗特性的值(作为一个可能的用例,想象一下鼠标)。 具有128位UUID的特性是20字节长。 因此,它可以写在一个单一的低能量交易。 写速度为50Hz,相当于每20ms写一次 。 因此写入20 * 50 * 8 = 8 kbit / s 。 我正在使用命令 / 写入无响应模式写入特性。 因此,在属性层上不会发生确认。 没有连接其他蓝牙或蓝牙低功耗设备。 没有什么是通过WLAN执行的。 在testing过程中没有其他特征被读取或写入。 我通过发送包含iPhone 4S序列号的数据包来testing程序。 序列号在每个发送的数据包之后递增1。 在接收端,使用一个集成了CSR1000 BLE芯片的可编程开发板,用于接收数据包并将接收到的序列号打印到串行连接。 我的问题如下: 一段时间后,数据包开始下降。 前100个数据包在50赫兹时工作正常。 从那时起,数据包开始下降。 0x00 – 0x46 received 0x47, 0x48 missing 0x49, 0x4a, 0x4b, 0x4c received 0x4d missing 0x4e, 0x4f, 0x50, 0x51 received 0x52 missing 0x53, […]

导入到CoreData时检查重复项

我使用RestKit将数据导入到Core Data存储中,并需要检查重复项。 如果商品已经在商店中,我想用最新的属性进行更新。 如果这是一个新的项目,我想创build它。 导入速度很慢,所以我使用了Instruments,并看到导入的最长部分是检查项目是否已经存在(具有获取请求) 所以我想知道如果检查是否该商品已经在商店中,是否更快: 使用countForFetchRequest来查看该项是否已经存在,然后executeFetchRequest返回要更新的项 只是executeFetchRequest获取项目更新 还是有更好的方法来做到这一点? 我认为countForFetchRequest会更快,因为整个NSManagedObject不返回,只有执行提取请求,如果我知道会有一个NSManagedObject。 谢谢 – (Product *)productWithId:(int)productID { NSManagedObjectContext *context = [Model sharedInstance].managedObjectContext; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"product_id == %d", productID]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; request.entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:context]; request.predicate = predicate; request.fetchLimit = 1; NSError *error = nil; NSUInteger count = [context countForFetchRequest:request error:&error]; […]

预渲染的核心graphicsanimation不会顺利地animation和内存

我发布这个问题是为了回应我之前问题中的一个答案 : 多个CALayer掩码导致性能问题 所以,现在我试图按照预先渲染的animation方法,我仍然无法获得stream畅的animation。 不仅如此,在实际设备上运行时,由于内存问题,应用程序会定期崩溃。 你可以看到在这里运行的animation: http : //cl.ly/e3Qu (video看起来不那么糟糕,但是关注animation的边缘,在实际的设备上performance更差)。 这是我的代码: static CGFloat const animationDuration = 1.5; static CGFloat const calculationRate = (1.0/40.0); // 40fps max. static CGFloat const calculationCycles = animationDuration/calculationRate; @implementation splashView { CADisplayLink* l; CGImageRef backgroundImg; UIColor* color; NSMutableArray* animationImages; NSTimeInterval currentTime; } -(void) beginAnimating { static dispatch_once_t d; dispatch_once(&d, ^{ CGFloat […]

SpriteKit,看似随意,下降到40 FPS

我在写一个iOS游戏,使用SpriteKit。 在游戏过程中,显然是随机的,帧速率将从60 FPS下降到40 FPS(总是40)。 我正在iPhone 6上运行这个版本。在编译发布和debugging的时候,这个bug是存在的。 我通常在屏幕上一次有30个左右的节点(有时候比较less),其中大部分节点都有物理实体,但是除了5个以外,其他的都是dynamic设置为NO 。 上述的物理实体不会相互碰撞,但是它们会与玩家节点发生碰撞。 玩家节点没有快速移动,而且一次只能触摸5个左右的节点。 当玩家节点与其他一些物理实体接触时,其dynamic属性被设置为YES 。 也许值得一提的是,我有一些UIView和UIImageView覆盖SKView的顶部,充当HUD。 这让我觉得这不是一个特别强烈的模拟。 我已经通过我的- update:方法,行动,联系侦听器等,没有发现任何可能造成这一点。 我在乐器(时间分析器)中度过了最后几天,希望能对这件事情有所了解,但是我还没有发现任何可以跳出来的东西。 不过,我承认对仪器来说还是比较新的。 现在,我没有办法重现错误。 我只是玩游戏,希望能遇到它。 有时会在场景加载(相当less见)时发生,只是在正常的游戏过程中,或者根本不存在。 如果我暂停游戏(暂停视图和场景),并恢复它,则帧速率会恢复。 有时帧速率会在几秒钟后恢复正常。 我完全不知道该怎么做。 任何帮助将非常感激。 提前致谢。