使用精美的应用程式never…耗电量,这是我们永远不喜欢的一件事。 最漂亮的应用程序会迅速释放电话。 就像现在我在构建应用程序一样,我希望它消耗的电池最少,这就是我要确保的方法。 要记住的要点- 由于结果必然会有所不同,请尝试在各种设备上运行和测试。 会有一个饱和点,然后您将无法进一步优化应用程序,但是在达到该点之前,会有很多地方需要优化。 整体性能和消耗将取决于 显示📱 CPU📲 网络📡 位置📍 背景⚙️
我有一个表视图链接到一个NSFetchedResultController (即加载数据,也跟踪更改数据绑定到FRC) 我没有在我的单元格中使用AutoLayout (由于在iOS 8中引入了巨大的性能下降)。 我正在手动布局单元格的内容(使用-(void)layoutSubviews )。 另外,根据内容计算行的高度,并正确地caching/无效。 如果任何与我的数据相关的条件发生变化,相关的单元格单独更新(使用整个-(void)controllerWillChangeContent:…通过-(void)controllerDidChangeContent:…实现的委托方法)行更新的animation是: UITableViewRowAnimationNone 这里的问题是,我的单元格具有透明的背景,我可以看到一些视觉噪声(很可能是实际的单元格被垂直拉伸,我不能肯定地说,因为他们真的是短暂的和短暂的) [self.tableView reloadRowsAtIndexPaths:…]; 。 我已经尝试了很多东西无济于事! 以下是我尝试过的不起作用的东西: 实现-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath ,返回估计高度的准确值。 设置self.tableView.rowHeight=UITableViewAutomaticDimension; ,帮助很多,但不解决它。 在[self.tableView beginUpdates];禁用animation[self.tableView beginUpdates]; 并在[self.tableView endUpdates];后启用[self.tableView endUpdates]; -(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 事情有一点帮助: 使细胞不透明(即为细胞设置背景颜色)。 奇怪的是,文物似乎是在实际的细胞内容。 更多信息 我的单元格的大部分内容都是来自AsyncDisplayKit (ASTextNode,ASImageNode)的节点,但是用它们的UIKitreplace它们并不能解决问题。 我所有的视觉更新都发生在主线程上。 我总是确保这一点。 这个问题并不是无处不在,而是经常存在。 如果有帮助,他们似乎发生更多的插入第二个单元格后。 logging方法-(void)layoutSubviews在我的单元格中显示,每次更新时,具有更新条件的单元格将连续重新加载3次,而其他单元格只会更新一次。 我不强制任何[cell layoutIfNeeded]; 或[cell setNeedsLayout]; 任何地方。 使用[self.tableView reloadData];重新加载整个表视图[self.tableView reloadData]; 对我来说不是一个select。 […]
我正在做一些关于Swift的研究,它与Objective-C有所不同。 从我能收集到的信息来看,Swift的当前版本比Objective-C更快,速度更快: 请看这里 。 但是,由于这些testing大部分是通过sortingalgorithm来完成的,所以我想知道Swift在用于开发iOS应用程序时是否比Objective-C更快。 任何人都可以启发我,最好从他们自己的经验。
我有一个主视图控制器,并继续到第二个视图控制器,有一个avcapturesession。 我第一次从主视图控制器继续捕捉会话控制器,大约需要50ms(使用“工具”进行检查)。 然后,我从捕获会话中回到主视图控制器,然后从主控制器返回到avcapturesession控制器。 每次从主视图控制器切换到avcapturesession需要更长的时间,并且通过第5次或第6次迭代,轮stream花费大约10秒。 (相比第一次50ms)我已经粘贴下面的avcapture会话的相关代码。 任何人都可以解决这个问题 谢谢 这个类(NSObjecttypes)pipe理第二个视图控制器的捕获会话 那实际上实施了avcapturesession #import "CaptureSessionManager.h" @implementation CaptureSessionManager @synthesize captureSession; @synthesize previewLayer; #pragma mark Capture Session Configuration – (id)init { if ((self = [super init])) { [self setCaptureSession:[[AVCaptureSession alloc] init]]; } return self; } – (void)addVideoPreviewLayer { [self setPreviewLayer:[[[AVCaptureVideoPreviewLayer alloc] initWithSession:[self captureSession]] autorelease]]; [[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill]; } – (void)addVideoInput { […]
我正试图解决回文分区问题。 你可以在https://leetcode.com/problems/palindrome-partitioning/find这个问题。 我想出了解决scheme: func partition(_ s: String) -> [[String]] { var result: [[String]] = [] func dfs(string: String, partiton: [String]) { if string.characters.count == 0 { result.append(partiton) return } for length in 1…string.characters.count { let endIndex = string.index(string.startIndex, offsetBy: length-1) let part = string[string.startIndex…endIndex] if isPalindrome(part) { let leftPart = string[string.index(after: endIndex)..<string.endIndex] print("string: \(string) part: […]