这是我写的一段代码,用于清理一串不需要的字符和双倍间距。 但是,我似乎误解了某处的内存管理,并一直导致EXC_BAD_ACCESS错误。代码在发布语句被删除但是会导致内存泄漏时在功能上工作良好。为什么此代码会导致EXC_BAD_ACCESS错误?
-(NSString*) cleaningString:(NSString*) input {
NSCharacterSet* wantedCharacters=[[NSCharacterSet alloc] init];
wantedCharacters=[ NSCharacterSet
characterSetWithCharactersInString:@"qwertyuiopasdfghjklzxcvbnm"];
NSString* cleanStringOutput=[[NSString alloc] initWithString:@""];
NSString* currentLetter =[[NSString alloc] initWithString:@" "];
NSRange unwantedCharacters=[currentLetter rangeOfCharacterFromSet:wantedCharacters];
for (int i=0; i<input.length; i++) {
currentLetter=[NSString stringWithFormat:@"%c",[input characterAtIndex:i]];
unwantedCharacters=[currentLetter rangeOfCharacterFromSet:wantedCharacters];
doubleSpace=YES;
if (i<input.length-1) {
if (([currentLetter isEqualToString:@" "])&&([[NSString stringWithFormat:@"%c",[input characterAtIndex:i+1]] isEqualToString:@" "])) {
doubleSpace=NO;}
}
else {
if ([currentLetter isEqualToString:@" "]) {
doubleSpace=NO;
}
}
if ((unwantedCharacters.location!=NSNotFound)&&(doubleSpace))
{
cleanStringOutput=[NSString stringWithFormat:@"%@%@", cleanStringOutput, currentLetter];
}
}
if (cleanStringOutput.length>0){
if ([[NSString stringWithFormat:@"%c",[cleanStringOutput characterAtIndex:0]] isEqualToString:@" "]){
cleanStringOutput=[cleanStringOutput substringFromIndex:1];
}
}
[currentLetter release];
[wantedCharacters release];
[cleanStringOutput autorelease];
return cleanStringOutput;
}
请原谅我,如果我只是问了一些痛苦明显的东西。
P.S.还有一个问题。是否有必要释放NSRange?
我的建议 - >看看https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html这将帮助你从长远来看.. –
你有一个基本问题,它可以说明其他人理解它是什么。这不仅仅是一个“解决我的问题”的问题。我认为它不应该被投票。它看起来像沃伦伯顿为你确定。 – Jim
我只是没有意识到返回的对象是autorelease。我有一些与Java的经验,但没有保留和释放内存管理... – Charles