【发布时间】:2012-09-06 00:53:19
【问题描述】:
我一直在使用以下代码,几乎没有任何问题,但今天 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;
}
【问题讨论】:
-
您尝试运行分析器了吗?还是其他工具?
-
为什么不直接使用 ARC?我无法想象如果他们只是使用 ARC,会有多少人不会在这里。
-
@RichardJ.RossIII -- 你认为他们不会继续下一个问题吗? ARC 很可能会成为草率编码实践的“推动者”。
-
@HotLicks 至少有助于阻止标记为
memory-management的问题泛滥。 -
@RichardJ.RossIII -- 没问题 -- 我们需要替换
homework标记。
标签: objective-c ios memory-management