传递给方法并使用返回的 Nsstring 对象时 NSString 操作(内存管理)的正确方法



我有一个单例类,有一个可重用的代码用于字符串操作,有时会泄漏内存。

-(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

最新更新