iPhone의 클래스 간 값을 전송하는 방법은 무엇입니까?
-
03-07-2019 - |
문제
한 클래스에서 다른 클래스로 문자열을 보내고 싶습니다.
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];
}