내가 오토 릴리즈 유명한 방법 stringByAppendingString를 사용하는 샘플 방법의 단점 3 변종을 게시 할 예정입니다 (엑스 코드 4.6.2.IOS 프로젝트에서 비 아크 샘플 프로젝트)stringByAppendingString 및 유지 딜레마
샘플 블록 1 :. 아무 것도 반환하지 않습니다. 이상한 점은 아무것도 가리키지 않습니다. 그러나 null이 아닙니다.
샘플 블록 2 : 아무것도 반환하지 않습니다!.
샘플 블록 3 : A1A2A3을 반환합니다. 예상대로하지만 누수가 있다고 생각합니다.
내 질문 :
a) 샘플 방법 1 예상대로 MAC 프로젝트에서 작동합니다. 그러나 IOS 프로젝트는 아닙니다.
b)는 샘플 블록 3 - 누출을 포함합니까?
c) 샘플 블록 2의 의견을 확인하십시오. word_는 A1, A1A2 및 아무 것도 아닙니다. 왜요?
d) 다른 방법으로 같은 방법으로 자신의 코드를 작성 하시겠습니까?. 안전한 standart 방법을 찾고 있습니다.
감사합니다.
샘플 블록 1
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[word_ stringByAppendingString:a1];// word_ is A1
word_=[word_ stringByAppendingString:a2];// word is nothing but another pointer
word_=[word_ stringByAppendingString:a3];// word is nothing too but pointer changed.
return word_;
}
샘플 블록 2
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[word_ stringByAppendingString:a1];// word_ is A1
word_=[[word_ stringByAppendingString:a2]retain];// word is A1A2
word_=[[word_ stringByAppendingString:a3]retain];// word is nothing !
return word_;
}
샘플 블록 3
내 답변 : 단지 내가 아무 것도하지 않았기 때문에. 디버그 프로세스 단계에서 변수 값을 매우 세밀하게 수집했습니다.
하지만 어떻게 든 그것은 깨끗한 project.hope 이후 some.or에 대한 시간을 절약 할 수 있습니다 어쩌면 메모리 칩 주소에 뭔가 잘못 됐는지 알고 해결됩니다.
코드에서 수행 할 작업을 중단 점에 넣고 검사하지 않으면 코드에서 말하는대로 수행하지 않으면 정리할 시간입니다. –
FYI, 이것을 쓰는 관용적 인 방법은'NSString * word_ = [NSString stringWithFormat : @ "% @ % @ % @", a1, a2, a3]'입니다. – Chuck
저는 이것이 메모리 관리가 어떻게 작동 하는지를 이해하는 한 예라고 생각합니다. 그렇지 않으면 그는 "A1A2A3"를 반환 할 수 있습니다. –