2011-03-18 4 views
3

나는이 http://lists.apple.com/archives/objc-language/2011/Mar/msg00084.htmlCFRetain는 가비지 컬렉터와 C 문자열을 사용

이 긴 (흥미) 스레드, 그리고 내가 잘 요점을 놓친 ...이 비트 잡은

내 눈을 읽고 있었다

char* path = [string fileSystemRepresentation]; 
    CFRetain (path); 
    int result = open (path, ...); 
    CFRelease (path); 

가비지 수집되지 않을 때 (char *는 CFType이 아님)이 작업을 수행 할 수 없다는 것을 알고 있습니다. 가비지 수집이 활성화되면이 작업이 수행됩니까?

내 생각에 이것은 실수이거나 솔루션으로 제안되지는 않았지만 실제로 읽는 방법입니다.

답변

1

예, 잘못되었습니다. CFRetain은 CFTypes에서만 작동합니다. C 포인터/구조체는 GC가 활성화되어 있어도 가비지 수집되지 않습니다. GC가 아닌 경우 문자열은 자동 복구 풀에 저장되므로 풀이 비워 질 때까지 걱정할 필요가 없습니다. 문자열을 고정 할 필요가 있다면 문자열을 복사해야합니다.

interior pointers에있는 문서 섹션이 유용 할 수 있습니다. char *은 원래 포함 된 객체에 액세스 할 수 없지만 본질적으로 내부 포인터입니다.

+0

확인해 주셔서 감사합니다. 나는 그 실에 아무도 그걸 가져다주지 못하는 것에 여전히 놀랐다. – hooleyhoop

관련 문제