在 Objective-C 中调试应用程序图稿变慢
Posted
技术标签:
【中文标题】在 Objective-C 中调试应用程序图稿变慢【英文标题】:Debugging app artwork slow down in Objective-C 【发布时间】:2012-07-25 13:08:46 【问题描述】:我有一个 tableviewcontroller,特别是在我的应用程序中,滚动时有点紧张。
我相当肯定这是因为我的自定义 UISegmentedControl 外观,我的表格中有四个,每个都在自己的单元格中。
我在我的应用委托中使用此代码来自定义它们:
[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControl.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"SegmentedControlSelected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"SegmentedControlSelectedDivider.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], UITextAttributeTextColor,
[UIColor grayColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)], UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"Georgia-Italic" size:0.0], UITextAttributeFont,
nil] forState:UIControlStateNormal];
为什么这会导致速度如此缓慢?我可以做些什么来提高性能?当它们出现在屏幕上时,它会抖动。我以前从来没有遇到过这样的问题。
我很确定它是开关和分段控件,因为当我移除它们时,它会加速并且变得如丝般顺滑。我基本上是这样做的:
if (indexPath.row == 0)
cell.textLabel.text = @"text";
UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"1", @"2", nil]];
[segControl setSelectedSegmentIndex:[myBool boolValue]];
[segControl setSegmentedControlStyle:UISegmentedControlStyleBar];
[segControl addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView = segControl;
在我的cellForRowAtIndexPath
7 次中,我怎样才能让它更快?
【问题讨论】:
我看不出这种外观定制会影响到这一点的任何原因,除非您弄乱了图像尺寸。你的 cellForRowAtIndexPath 是什么样的? 添加了一些额外信息进行了编辑。 【参考方案1】:我有一个正在开发的应用程序,并且有一些类似的自定义设置。我建议重用设置控件...您可以通过创建 UITableViewCell 子类并在其中设置您的 seg 控件来完成此操作,然后您可以为需要自定义的内容创建插座。
快速搜索找到了这个教程,看起来就像我在说什么
UITableViewCell Prototype Tutorial
这样您的细胞将完全可重复使用,因此速度更快。
但是,我现在不知道您的确切用例,所以也许这不适用于您。它通过自定义按钮、艺术和动画加速了我的单元格。
记住 alloc 初始化非常慢。
我猜另一种选择是使用控件预先初始化所有可以使用的控件,并将它们存储在数组中,然后仅将它们加载到 cellForRowAtIndexPath 中:
【讨论】:
以上是关于在 Objective-C 中调试应用程序图稿变慢的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 列表中显示 MPMediaItem 图稿?
在 Swift 和 AVPlayer 中显示音频流的图稿? [复制]
NSImage 标准图稿和图标 NSImageNameStatusAvailable