here에 설명 된 기술을 사용하여 "위조 된"가변 인수 목록을 구성하려고하지만 ARC 사용 가능 프로젝트의 경우 얻을 방법을 알 수 없습니다. 내가 겪고있는 오류를 없애라.ARC를 사용하여 char *를 id *로 변환하는 방법
비 오브젝티브 C 포인터 타입 '문자의 캐스트 * : 말,
NSMutableArray* argumentsArray = [NSMutableArray array]; // ... Here I fill argumentsArray with some elements // And then, I want to construct a "fake" variable argument list char* fakeArgList = (char*) malloc(sizeof(NSString*) * [argumentsArray count]); [argumentsArray getObjects: (id*) fakeArgList]; NSString* content = [[NSString alloc] initWithFormat: formatString arguments:fakeArgList];
엑스 코드는 (ID) fakeArgList * 캐스팅에 불만 : 여기
문제의 코드입니다 'to'_autoreleasing id * ' 은 ARC에서 허용되지 않습니다
제 초기 이론은 th (ID *) 캐스팅에 __unsafe_unretained를 추가하여 ARC에 메모리 블록을 담당하고 유지/릴리스해서는 안된다는 사실을 알리고 싶습니다.하지만 작동하지 않습니다. 이 문제를 해결하십시오.
업데이트 : 다음은 전체 기능입니다. 그것은 .plist 안에 printf-style 포맷 스트링과 필드 이름의 변수리스트를 가져 와서 .plist로부터로드 된 데이터로 포맷 된 스트링을 출력해야한다. 즉, 나는 필드 "필드 1"= "foo는"과 "FIELD2"= 3, 그때 내가 문자열을 얻어야한다 [loadStringFromFixture: @"?param1=%@¶m2=%d", @"field1", @field2]
전화? "PARAM1 = foo는 & PARAM2 = 3"
- (NSString*) loadStringFromFixture:(NSString*) format, ...
{
NSString* path = [[NSBundle mainBundle] bundlePath];
NSString* finalPath = [path stringByAppendingPathComponent:@"MockAPI-Fixtures.plist"];
NSDictionary* plistData = [NSDictionary dictionaryWithContentsOfFile:finalPath];
va_list argumentsList;
va_start(argumentsList, format);
NSString* nextArgument;
NSMutableArray* argumentsArray = [NSMutableArray array];
while((nextArgument = va_arg(argumentsList, NSString*)))
{
[argumentsArray addObject: [plistData objectForKey:nextArgument]];
}
NSRange myRange = NSMakeRange(0, [argumentsArray count]);
id* fakeArgList = (__bridge id *)malloc(sizeof(NSString *) * [argumentsArray count]);
[argumentsArray getObjects:fakeArgList range:myRange];
NSString * content = [[NSString alloc] initWithFormat:formatString
arguments:(__bridge va_list)fakeArgList];
free(fakeArgList);
return content;
}
이 할 수있는 더 좋은 방법이 있어야합니다 ... – semisight
진심; 원본 기사를 빨리 읽으면 우연히 만 작동하고 ABI 또는 사양 범위를 벗어난다고 생각합니다. – bbum
사실,하지만 내 단위 테스트 코드에만 필요하기 때문에 꽤 더러운 해킹이라는 사실에 덜 관심이 있습니다. 누군가 가변 인수 목록을 만드는 더 좋은 방법을 지적 할 수는 있지만, 나는 정말로 흥미 롭다. –