這是我寫的一段代碼,用於清理一串不需要的字符和雙倍間距。 但是,我似乎誤解了某處的內存管理,並一直導致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