由于我在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及其单元格。
现在问题变得更容易处理了。而我目前正在实施一个可能的解决方案。
答案 0 :(得分:0)
解决方案:
移动代码
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];
在tableview的实际重新绘制之外。