私はほとんど問題なく次のコードを使用してきましたが、今日、Xcode はそれについて大きな不満を言い始めました。バグ/メモリリークが実際にあったかどうかを確認する前に、私はほとんど夢中になりました。Xcodeは、「割り当て解除されたインスタンスにメッセージが送信されました」と述べました。数行 (リリース) にコメントしたところ、クラッシュしなくなりました。
問題は、私はここで完全に迷っているということです...メモリリークを避けるためにそれらを解放すべきではありませんか? このプロジェクトでは iOS 4.0 をターゲットにしているため、手動のメモリ管理は必須です。
+ (NSString*)reformatRule:(NSString*) ruleStr {
NSString *bufRule = [[[NSString alloc] init] autorelease];
NSString *buf = [[NSString alloc] init];
char c = 0;
NSString *value = [[NSString alloc] init];
for(int i=0;i<[ruleStr length];i++){
c = [ruleStr characterAtIndex:i];
if([self isCharacterOrDigit:[NSString stringWithFormat:@"%c",c]]){
buf = [buf stringByAppendingString:[NSString stringWithFormat:@"%c",c]];
}else{
DLog(@"says:%@",buf);
value = [buf stringByReplacingOccurrencesOfString:@" " withString:@""];
//[buf release];
//buf = [[NSString alloc] init];
buf = @"";
if (![value isEqualToString:@""]) {
if ([value isEqualToString:CONDITION_AND] || [value isEqualToString:CONDITION_OR]) {
bufRule = [bufRule stringByAppendingString:[NSString stringWithFormat:@"%@",value]];
}else{
bufRule = [bufRule stringByAppendingString:[NSString stringWithFormat:@"(%@)",value]];
}
}
if(c!=' '){
bufRule = [bufRule stringByAppendingString:[NSString stringWithFormat:@"%c",c]];
}
}
}
// [value release]; COMMENTED THIS LINE
// [buf release]; AND THIS ONE TOO
return bufRule;
}