IOS6中的内存分配差异?

时间:2012-10-03 09:22:22

标签: ios6 uisearchbar uisearchdisplaycontroller lag

由于我在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及其单元格。

现在问题变得更容易处理了。而我目前正在实施一个可能的解决方案。

1 个答案:

答案 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的实际重新绘制之外。