3
私はXcode 4.2でiOS 5.0の新しいNSLinguisticTaggerを使っています。この関数の私の目的は、アドレス帳のレコードを取り込み、NSStringとしてABRecordCopyCompositeNameのような種類の複合名を吐き出すことですが、東アジア言語とハンガリー語の命名順序を考慮に入れています(最初の最後)。ここでは機能があります:NSLinguisticTaggerメモリリーク
NSString *text = [self getLocalizedFullNameOfRecord:[contacts objectAtIndex:indexPath.section];
- (NSString *) getLocalizedFullNameOfRecord:(ABRecordRef) person
{
NSString *firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *middleName = ABRecordCopyValue(person, kABPersonMiddleNameProperty);
NSString *lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
NSString *prefix = ABRecordCopyValue(person, kABPersonPrefixProperty);
NSString *suffix = ABRecordCopyValue(person, kABPersonSuffixProperty);
NSString *fullName = @"";
__block BOOL Asian;
// Apologies to all Hungarians who aren't actually Asian
__block NSArray *asianLanguages = [NSArray arrayWithObjects:@"zh-Hant", @"zh-Hans", @"ja", @"ko", @"hu", @"vi", nil];
[firstName enumerateLinguisticTagsInRange:NSMakeRange(0, firstName.length) scheme: NSLinguisticTagSchemeLanguage options: NSLinguisticTaggerOmitWhitespace orthography: nil usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop){
if ([asianLanguages containsObject:tag])
Asian = YES;
else
Asian = NO;
}];
if(prefix)
fullName = [fullName stringByAppendingFormat:@"%@ ", prefix];
if(Asian && lastName)
fullName = [fullName stringByAppendingFormat:@"%@ ", lastName];
else if(firstName)
fullName = [fullName stringByAppendingFormat:@"%@ ", firstName];
if(middleName)
fullName = [fullName stringByAppendingFormat:@"%@ ", middleName];
if(Asian && firstName)
fullName = [fullName stringByAppendingFormat:@"%@ ", firstName];
else if(lastName)
fullName = [fullName stringByAppendingFormat:@"%@ ", lastName];
if(suffix)
fullName = [fullName stringByAppendingFormat:@"%@", suffix];
[firstName release];
[middleName release];
[lastName release];
[prefix release];
[suffix release];
return fullName;
}
インスツルメンツは、私は(明らかではなく、ブロックの一部)enumerateLinguisticTaggerに、この機能の反復ごとにいくつかの16〜32バイトをリークしていますと言われます。 NSLinguisticTaggerのオンラインリソースはクラス参照と単一のチュートリアルに限られているため、どこでどのように漏れを探し始めるか分かりません。
助けてください?
+1便利なコードです。私はこれを見ていて(http://www.w3.org/International/questions/qa-personal-names)、どうやってそれをやっているのだろうと思っていました、そして、ヘイ・プレスト、救出へのセレンディピティ:-) –