मैं एक फिक्स लंबाई परिवर्तनशील सामग्री साझा डेटा बफर करना चाहते हैं और है कि मैं इसे कैसे बना सकता हूँ है:व्यवहार: लंबाई: freeWhenDone:
void *buffer = malloc(length);
// initialize buffer content
NSData *sharedData = [[NSData alloc] initWithBytesNoCopy:buffer length:length freeWhenDone:YES]
क्या के बाद मैं एक बनाया है कि अगर मैं buffer
संशोधित एनएसडीटा से? क्या एनएसडीटा buffer
पर किए गए परिवर्तन को प्रतिबिंबित करेगा?
मैं गारंटी दे सकता हूं कि sharedData
जब मैं buffer
को संशोधित करना चाहता हूं तो डीलोक नहीं मिलेगा।
यह कैसे मैं वास्तव में इसका उपयोग करना चाहते है:
void *my_alloc(CFIndex allocSize, CFOptionFlags hint, void *info) {return NULL;}
void my_dealloc(void *ptr, void *info) {
mach_vm_deallocate(mach_task_self(), (mach_vm_address_t)ptr, (size_t)info);
}
size_t length = //some number
mach_vm_address_t buffer;
mach_vm_allocate(mach_task_self(), &buffer, length, VM_FLAGS_ANYWHERE);
// do something to buffer, for example pass to other process using mach RPC and expect other process will modify the content
CFAllocatorContext context = {0, (void *)length, NULL, NULL, NULL, my_alloc, NULL, my_dealloc, NULL};
CFAllocatorRef allocator = CFAllocatorCreate(NULL, &context);
CFDataCreateWithBytesNoCopy(NULL, (const UInt8 *)buffer, length, allocator);