2013-03-07 2 views
0

나는 여러 클래스 사이에 NSStrings을 여러 번 보내고 있습니다. 나는 그들을 잃어 버리고 있다고 생각합니다.여러 클래스 사이의 인수로 NSString

i가 있다고 가정 할 : classA ,classB, classC

classAclassB의 인스턴스 (할당)을 구비하고 그 ClassB가, 에서 B의 기능 함수를 호출한다 : 함께 작동

-(NSMutableData*)setProtocolDataForString:(NSString*)data WithCommand:(int)comm 
{ //here i can see and log the string 'data', but i am sending him to classC from here 
    [classCInstance send:data]; 
} 

classA 전화 : ..setProtocolDataForString:@"ran"];

내가 안에 쓴 것처럼 나는 classB가 문자열을 얻는 것을 볼 수 있지만 다른 클래스 C에 전달한 후에 나는 그것을 생각한다. 잃어버린 것. 정확히 함수가 얻은 NS 인수의 값을 저장/유지하는 방법은 무엇입니까? 어떻게하면이 문자열을 무한 클래스 사이로 전달할 수 있고 해제되지 않을까요?

** 그 중요한 경우 잘 모릅니다 만,를 ClassA/B는 ARC를 사용 해달라고하지만, classC는 그것이 클래스 C에 전달되는 문자열의 자신의 복사본입니다 가지고 B 요구

답변

3

클래스 않습니다. NSString 인스턴스는 값 오브젝트로 간주되기 때문에 단순히 문자열을 보유하지 않고 대신 사본을 작성하십시오.

NSString newString = [aString copy];aString은 이미 보유하지 않을 자체 보유 수의 사본이 있으므로 안전하게 릴리스 할 수 있습니다.

사본을 출시/자동 해제해야합니다. 이것은 자동으로 수행되지 않습니다. 이것을 잊어 버리면 응용 프로그램에서 메모리가 누수됩니다.

[classCInstance send:[[data copy] autorelease]]; 
0

를 하나 할당 또는 그 이전 있는 NSString 개체를 유지 클래스 메소드에 전달 :

다음 코드는 당신을 위해 작동합니다.

0

클래스 A와 B는 ARC를 사용할 수 없으므로 문자열을 유지해야합니다.

-(NSMutableData*)setProtocolDataForString:(NSString*)data WithCommand:(int)comm 
{ //here i can see and log the string 'data', but i am sending him to classC from here 
    [data retain]; 
    [classCInstance send:data]; 
} 
관련 문제