2010-09-27 37 views
18

Làm thế nào để chuyển đổi CFDataRef thành NSData?Làm thế nào để chuyển đổi CFDataRef thành NSData?

Tôi có CFDataRef và tôi muốn chuyển đổi nó thành NSData. Tôi không nhận được làm thế nào để làm điều này.

ai giúp tôi ..

CGDataProviderRef dataProvider = CGImageGetDataProvider(screenShot); 
    CFDataRef data = CGDataProviderCopyData(dataProvider); 
    CGDataProviderRelease(dataProvider); 
    NSString *imagePathLocation = [destinationPath stringByAppendingString:[@"/" stringByAppendingString:DesktopImage]]; 
    [[NSFileManager defaultManager]createFileAtPath: imagePathLocation contents:nil attributes:nil]; 
    fileHandleForImage = [NSFileHandle fileHandleForWritingAtPath:imagePathLocation]; 
    NSData * data1 = (NSData *)data; 
    [fileHandleForImage writeData:data1]; 

Khi tôi định kiểu (NSData * data1 = (NSData *)data) nó ảnh bị hỏng.

+1

Tôi nghĩ bạn có nghĩa là CFDataRef. Tôi không thể tìm thấy bất kỳ tham chiếu đến CGDataRef trong tài liệu của Apple. –

Trả lời

27

Đó là cầu nối miễn phí, vì vậy bạn chỉ cần bỏ nó.

NSData *myData = (NSData *)myCFDataRef; 
+0

có CFDataRef của nó, tôi xin lỗi. Tôi muốn tiết kiệm CGImage. –

+4

điều này sẽ không được phép trong ARC. –

+1

Bạn chỉ cần thêm từ khóa quyền sở hữu thích hợp. Xem https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW3 và http: //www.mikeash .com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html (tìm kiếm "Toll-Free Bridging") để biết chi tiết. –

11

Như @KrisMarkel nói, bạn chỉ cần phải chuyển quyền sở hữu cho ARC như vậy:

Giống như chuyển quyền sở hữu:

NSData* data1 = (__bridge_transfer NSData*) data; 

khác sử dụng tài liệu tham khảo mà không chuyển quyền sở hữu:

NSData* data2 = (__bridge NSData*) data; 
Các vấn đề liên quan