我有一个单例类,有一个可重用的代码用于字符串操作,有时会泄漏内存。
-(NSString *)getLocalizedString:(NSString *)key
{
@autoreleasepool
{
FMDatabase *db=[FMDatabase databaseWithPath:databasePath];
[db open];
// NSString *uppercaseValue=[key uppercaseString];
NSString *uppercaseValue = [[NSString alloc] initWithString:[key uppercaseString]];
NSString *slashRemoved=[uppercaseValue stringByReplacingOccurrencesOfString:@"/" withString:@" "];
NSString *spaceRemoved=[slashRemoved stringByReplacingOccurrencesOfString:@" " withString:@"_"];
NSString *dotRemoved=[spaceRemoved stringByReplacingOccurrencesOfString:@"." withString:@""];
NSString *collanRemoved=[dotRemoved stringByReplacingOccurrencesOfString:@":" withString:@""];
NSString *excalmaRemoved=[collanRemoved stringByReplacingOccurrencesOfString:@"!" withString:@""];
NSString *commaRemoved=[excalmaRemoved stringByReplacingOccurrencesOfString:@"," withString:@""];
NSString *webaddressRemoved=[commaRemoved stringByReplacingOccurrencesOfString:@"ABCCOM" withString:@"ABC.COM"];
NSString *value=[db stringForQuery:@"select value from language where name=? AND key=?",[Utils getCurrentLanguage],webaddressRemoved];
if(value==nil)
{
value=key;
}
return value;
}
}
用法:
NSString *textString = [[NSString alloc]initWithString:[langmodule getLocalizedString:[[arrSetting objectAtIndex:indexPath.row] objectForKey:@"name"]]];
[cell.textLabel setText:textString];
[tip setTitle:[langmodule getLocalizedString:[[self.transactionSource objectAtIndex:indexPath.row] valueForKey:@"tip"]] forState:UIControlStateNormal];
*方法getLocalizedString有时泄漏 NSString value=[db stringForQuery:@"从语言中选择值,其中 name=?AND key=?",[Utils getCurrentLanguage],webaddressRemoved];
我的+getCurrentLanguage
方法如下所示:
+(NSString *)getCurrentLanguage
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
if([currentLanguage isEqualToString:@"fr"])
{
currentLanguage=@"french";
}
else if([currentLanguage isEqualToString:@"de"])
{
currentLanguage=@"german";
}
else if([currentLanguage isEqualToString:@"ja"])
{
currentLanguage=@"japanese";
}
else if([currentLanguage isEqualToString:@"es"])
{
currentLanguage=@"spanish";
}
else if([currentLanguage isEqualToString:@"nl"])
{
currentLanguage=@"dutch";
}
else if([currentLanguage isEqualToString:@"pt"])
{
currentLanguage=@"portuguese";
}
else if([currentLanguage isEqualToString:@"zh-Hans"])
{
currentLanguage=@"chinese";
}
else if([currentLanguage isEqualToString:@"ko"])
{
currentLanguage=@"korean";
}
else if([currentLanguage isEqualToString:@"it"])
{
currentLanguage=@"italian";
}
else {
currentLanguage=@"english";
}
return currentLanguage;
}
我的getLocaliztionString
很好,还是内存问题。该项目在 ARC 上。感谢和问候
用于在 iPhone 中管理本地化的最佳方式,我发现使用 TSLanguageManager 库您可以从以下链接进行检查:https://github.com/tonisalae/TSLanguageManager