自从我在 iPhone 4 上更新了我的 iOS 软件后,我正在开发的应用程序开始出现滞后。这仅在我向 UISearchField 提供输入时才会发生。
当我在 iOS 键盘上敲击大约 30 个字母时,就会出现“滞后”。之后,每次连续点击都会滞后,给人一种手机本身无法再处理输入的感觉。
我有一个 UISearchDisplayController,只要我在搜索字段中输入三个或更多字母,它就会对我的数据库进行选择。
这是一些代码。
实际搜索
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if ([searchText length] >= 3)
{
if (searchObject != nil)
{
searchObject = nil;
searchObject = [[FritextSok alloc]init];
[searchObject setDelegate:self];
}
[searchObject setSearchstring:searchText];
[searchObject search];
}
else
{
// Displays non filtered results.
}
}
我在运行 iOS6 模拟器时也遇到了这种情况。
此外,除了 iOS 键盘“滞后”。在不同的视图控制器中,每一个 UISegmentedControl 似乎都需要 FOREVER 来绘制。这发生在键盘混搭之后。
我正在正确地重用单元格(我认为)并且不知道是什么原因造成的,因为它似乎可以在从 4.3 到 5.1 的所有 iOS 版本上完美运行。
我尝试了不同的方法来分配 searchObject。似乎没有任何帮助。
编辑
这是一条偶尔出现的错误消息
purgeIdleCellConnections: found one to purge conn = <Memory address>
编辑 2
在使用 PROFILER 工具进行更多试验和错误之后。我发现,由于这个块,活着的记忆在不断增加。
UISegmentedControl *segment = [[UISegmentedControl alloc] init];
segment.frame = CGRectMake(0, 0, 70, 32);
segment.selectedSegmentIndex = -1;
segment.segmentedControlStyle = UISegmentedControlStyleBar;
segment.tintColor = [UIColor colorWithRed:0.745 green:0.184 blue:0.216 alpha:1];
segment.momentary = YES;
segment.alpha = 0.9;
[segment insertSegmentWithTitle:@"Ta bort" atIndex:0 animated:NO];
[segment addTarget:self action:@selector(foo:) forControlEvents:UIControlEventValueChanged];
每次我在 UISearchField 中输入一个字符时,都会运行上面的块。由于 UISearchDisplayDelegate 为该-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
函数返回 YES。这会导致重新绘制 UITableView 及其单元格。
这个问题现在变得更容易处理了。我目前正在实施一个可能的修复。