그래서 정확히 내가 가지고있는 문제의 종류 인 것 같아서 this 질문을 읽었지 만 해당 게시물의 대답이 내 문제를 해결하지 못합니다. NSMutableData
의 데이터 직렬화 하위 클래스를 작성하려고합니다.ARC로 출력 매개 변수 사용
-(void)readString:(__autoreleasing NSString **)str
내가 특정을 얻을 수있는 기능의 일부 데이터 조작은 데이터 스트림에서 다음 문자열에 대응 바이트 않고, 나는이 선 전화 : 문제가있는 기능 헤더는 다음과 같습니다
*str = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
을
이 코드에는 오류가 없습니다. 내가 그렇게 같은 함수를 호출하려고 할 때 : 나는 앞에 __autoreleasing
를 배치 시도
Passing address of non-local object to __autoreleasing parameter for write-back
: 나는 실제로 함수를 호출 할 경우 라인에
+(id) deserialize:(SerializableData *)data
{
Program *newProgram = [[Program alloc] init];
[data readString:&(newProgram->programName)];
을, 나는 다음과 같은 오류가 발생합니다 첫 번째 *
앞에있는 NSString
선언과 두 *
사이에있는 모든 구성에서는 오류가 발생합니다.
다른 질문을 읽을 때 뭔가를 놓친 적이 있습니까? 아니면 ARC 컴파일러에서 게시물을 게시 한 이후로 변경된 사항이 있습니까?
는편집 :
이 문제가 내가 문자열에 액세스하려고하는 방식에서 오는 것으로 보인다. 나는 이런 식으로 뭔가를 수행하여 해결할 수 있습니다
NSString* temp;
[data readString&(temp)];
newProgram.programName = temp;
하지만 난 오히려 바르
할당 된 값이 자동으로 해제되기 때문에 ivar을 직접 사용할 수 없습니다. Autorelease는 항상 ivars에 좋지 않은 아이디어이므로 ARC가 허용합니다. 로컬 변수 'temp'를 사용하면 ARC가 필수 retain을 추가합니다. –