다음은 청소용으로 작성한 코드입니다. 원하지 않는 문자와 이중 간격 문자열입니다. 그러나 나는 어딘가에서 오해 된 메모리 관리를 갖고 있으며 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. 그리고 또 다른 질문입니다. NSRange를 공개해야합니까?
내 조언 -> 좀 봐 : https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html 이것은 장기적으로 당신을 도울 것입니다 .. –
당신은 근본적인 문제가 있으며 그것이 무엇인지를 다른 사람들이 이해할 수 있도록 설명하는 것이 좋습니다. 이것은 단순히 "내 codz 수정"문제가 아닙니다. 투표가 내려져야한다고 생각하지 않아 워렌 버튼이 당신을 위해 그것을 확인한 것 같습니다. – Jim
반환 된 객체가 autorelease라는 사실을 알지 못했습니다. 내가 자바와 함께 몇 가지 경험을 가지고 있지만 유지 및 릴리스 메모리 관리를하지 ... – Charles