【发布时间】:2011-12-04 10:52:59
【问题描述】:
在我的应用程序中运行某段代码时,我遇到了一些异常高的 CPU 使用率值。根据 Instruments,NSString 的 rangeOfString: 方法会导致这种情况。我确实经常在各种for 循环中使用这种方法,因为我真的必须这样做。
我的问题是:我该如何解决这个问题? Instruments 可以告诉我问题出在哪里,但是这段代码在一个单独的框架中,所以这是有限的。尽管我知道rangeOfString: 会导致它,但我不知道如何使用更多保留 CPU 的替代方案来解决这个问题。
这是导致这些问题的代码:
- (NSArray *)resultStrings
{
NSMutableArray*_output = [[NSMutableArray alloc] init];
UsageHistory*_history = [[UsageHistory alloc] init];
NSHTTPCookieStorage*storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray*UsageHistoryArray = [[NSArray alloc] initWithArray:[_history usageHistory]];
NSArray*_storageCookies = [[NSArray alloc] initWithArray:[storage cookies]];
for (DAHistoryObject*object in UsageHistoryArray)
{
for (NSHTTPCookie*ck in _storageCookies)
{
@autoreleasepool
{
NSString*domain = [ck domain];
if ([[[ck domain] substringToIndex:1] isEqualToString:@"."])
{
domain = [[ck domain] stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@""];
}
if ([[object url] rangeOfString:domain].location != NSNotFound)
{
NSHTTPCookie*cookie = [DAHTTPCookie createCookieWithURL:[ck domain] cookieName:[ck name] expires:[[ck expiresDate] timeIntervalSince1970] cookieValue:[ck value] browserType:DARavenBrowser secure:[ck isSecure]];
[_output addObject:cookie];
}
}
}
}
[UsageHistoryArray release];
[_storageCookies release];
[_history release];
return [_output autorelease];
}
【问题讨论】:
标签: objective-c cocoa