문제

한 클래스에서 다른 클래스로 문자열을 보내고 싶습니다.

1) Class1에서 문자열을 보유 할 속성을 추가합니다.

@property (nonatomic, retain) NSString *str; 

2) 문자열을 다시 보내는 메소드 :


-(NSString *)sendBackStr:(NSString *)strURL
{
    NSString *str = [[NSString alloc] stringWithString:strURL];
    return str;
}

3) Class2에서 수신 된 문자열을 보유하기 위해 속성을 추가합니다.

@property (nonatomic, retain) NSString *returnStr; 

4) 및 다음 코드 :

Class1 *c1 = [[Class1 alloc] init]; 
returnStr = [c1 sendBackStr:@"URL"];

그러나 프로그램은 returnstr = [c1 sendbackstr :@"url"]에서 중지됩니다. 그것에 무엇이 잘못되었는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

StringWithString은 자동 저리 문자열을 반환하는 클래스 메소드입니다. 당신은 이것을 다음과 같이 부릅니다.

myProperty = [NSString stringWithString:strURL]; 

여기서 나는 당신의 속성이 사본을 수행한다고 가정합니다. stringwithstring 메소드에서 반환 된 자동 저명한 문자열에서 유지 계산을 증가시킵니다. (Alloc Calls에서 반환 된 객체는 하나의 유지 카운트가 있고 자동 퇴직하지 않습니다.) 끈을 유지하기보다는 사본 속성을 제공하는 것이 더 일반적입니다. 일반적으로 공유 된 참조가 아니라 자신의 문자열 사본을 원합니다. 다른 사람이 소유 한 문자열.

내가 이해할 수없는 것은 단지 예제가 아니라면 이와 같은 코드를 작성한 이유입니다. 클래스 2에서는 당신이해야 할 일은 쓰기 만하면됩니다.

returnStr = [NSString stringWithString:@"URL"];

다른 팁

StringWithString : 클래스의 인스턴스가 아니라 NSString 클래스로 전송 해야하는 메시지입니다 (Alloc을 통해 반환).

올바른 코드는 다음과 같습니다.

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [NSString stringWithString:strURL];
}

당신은 포인터의 할당, 보존 및 자동 소개에 관한 관용구에 대해 더 많이 자신을 유사하게 만들고 싶을 것입니다. 어떤 이유로이 문자열을 할당하고 Sendbackstr : Message에서 반환하려면이 코드를 원할 것입니다.

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top