0

我在我的 iPhone 应用程序中使用 CocoaLibSpotify。在某一时刻,用户可以选择在 Spotify 上搜索艺术家/歌曲等。搜索完成后,将使用搜索结果填充 UITableView。我注意到该应用程序在执行几次搜索后开始滞后很多。我在 Instruments 中启动了活动监视器,并注意到执行搜索后 CPU 使用率(活动监视器中的 CPU 百分比)攀升至 200% 左右。奇怪的是,有时需要 2 分钟才能恢复到 6% 左右的正常水平。这是我用来执行搜索的代码:

-(void)performSearch:(NSString *)searchString{

    if(!self.spotifySearch){
        self.spotifySearch = [SPSearch searchWithSearchQuery:searchString inSession:[SPSession sharedSession]];

        [SPAsyncLoading waitUntilLoaded:self.spotifySearch timeout:20.0 then:^(NSArray *loadedItems, NSArray *notLoadedItems){
            NSLog(@"Search completed");
            self.spotifySearch = nil;
        }];
    }
}

显然,我的搜索方法并没有真正做太多,但简单地多次运行上述代码会导致大量 CPU 负载。有时它也会在只运行一次代码后发生。我现在的问题是:

  1. 有什么我做错了吗?
  2. 如何使用不同的搜索字符串运行多个 SPSearch?使用 SPSearch searchWithSearchQuery 重新初始化 SPSearch 对象是正确的方法吗?
  3. 有没有办法取消正在运行的搜索?

任何帮助表示赞赏,谢谢!

4

1 回答 1

0

你确定它实际上是搜索造成的吗?众所周知,播放列表系统有时会导致 CPU 使用率过高。使用仪器来推断负载的确切原因,您将处于一个更好的位置来修复它。

你的方法没有错。要取消搜索,只需释放它,它就会消失。同时运行多个搜索实例也很好。

于 2013-04-19T13:34:01.027 回答