iOS内存问题

Ign*_*oná -1 memory-management objective-c ios

我一直在使用以下代码,几乎没有任何问题,但今天Xcode开始抱怨它BIGTIME.在我发现错误/内存泄漏之前,我几乎疯了.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;
}
Run Code Online (Sandbox Code Playgroud)

Hot*_*cks 6

此行buf从保留指针转换为自动恢复指针:

buf = [buf stringByAppendingString:[NSString stringWithFormat:@"%c",c]];
Run Code Online (Sandbox Code Playgroud)

同样,这value条线有两条线向下.

如果你不打算使用ARC,你真的需要了解存储管理很多更好.