NSData
개체를 CFDataRef
으로 전송할 수 없습니다. the docs에서 언급 같은 CFDataRef
이 NSData
인스턴스와 동일한 아닌 "불변의 CFData 객체에 대한 참조"입니다 :
typedef const struct __CFData *CFDataRef;
가 NSData
예에서 CFDataRef
을 만들려면, 당신은 CFDataCreate
를 사용할 필요가 방법은 바이트 길이 통과 : 당신이 객체를 직접 만들 수 있기 때문에 또한
NSData *dataRef = UIImagePNGRepresentation([UIImage imageNamed:@"contact3.png"]);
CFDataRef dr = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
참고 즉, 당신은 또한 Core Foundation Ownership Policy 다음, 그것을 해제해야합니다; 당신은 코어 재단 개체의 소유권을 해제합니다 CFRelease
함수를 사용
CFRelease(dr);
이것은 코코아의 메모리 관리와 유사하며, 코어 재단 개체의 유지 카운트가 0에 도달하면이 해제됩니다.
편집 :Stefan
그렇게 내 원래의 대답은 잘못, NSData
및 CFData
는 무료 코코아와 코코아 터치와 아이폰에서 브리지 것으로, 자신의 의견에 완전히 옳았다. 내 잘못이야, 전에 편집 했어야 했어.
감사합니다. 좋은 힌트. 나는 Cocoa-Touch에서 (코코아에서와 같이) 그들 사이의 수신자 부담 브리징이 될 것이라고 생각했습니다. 그럼에도 불구하고 귀하의 스 니펫에 의해 새로운 CFDataRef를 만들려고했습니다. 그건 같은거야. 이상하게도 ABPersonSetImageData에서 오류가 발생하지 않습니다. – Stefan
알았어, 알아. 그것은 이미지였습니다. 그들 중 일부는 작동하지 않습니다. 도움 주셔서 감사합니다 – Stefan
걱정하지 마세요. 고맙습니다. –