Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用时需要了解内存管理;“无符号字符”;指向原始数据缓冲区_Objective C_Cocoa_Unsigned Char - Fatal编程技术网

Objective c 使用时需要了解内存管理;“无符号字符”;指向原始数据缓冲区

Objective c 使用时需要了解内存管理;“无符号字符”;指向原始数据缓冲区,objective-c,cocoa,unsigned-char,Objective C,Cocoa,Unsigned Char,我的问题在下面的代码中。我想了解,当涉及到“unsignedchar”指针时,是否存在“保留”这样的事情。请解释一下 // MyObject.h @interface myObject : NSObject { unsigned char *myData; } // MyObject.m -(void)makeNewData { if (myData) { free(myData); } myData = [self createBitmapContextD

我的问题在下面的代码中。我想了解,当涉及到“unsignedchar”指针时,是否存在“保留”这样的事情。请解释一下

// MyObject.h

@interface myObject : NSObject {

    unsigned char   *myData;
}

// MyObject.m

-(void)makeNewData
{

    if (myData) { free(myData); }
    myData = [self createBitmapContextData:myCGImageRef];

    //Here is my question: do I need a "retain" call equivalent on the next line?
    //[myData retain];

}

- (unsigned char*)createBitmapContextData:(CGImageRef)fromImage
{

    CGContextRef cgctx = [self createARGBBitmapContextFromImage:myCGImage];
    if (cgctx == NULL) { return nil; }

    size_t w = CGImageGetWidth(myCGImage);
    size_t h = CGImageGetHeight(myCGImage);
    CGRect rect = {{0,0},{w,h}}; 

    CGContextDrawImage(cgctx, rect, myCGImage); 

    unsigned char* data = CGBitmapContextGetData (cgctx);

    CGContextRelease(cgctx);

    return data;

}

不,不存在“保留”原始指针这样的事情


正如mackross所说,
NSData
可用于在您自己分配数据时保留数据。但是,在本例中,您并不拥有数据,您只是从拥有它的
CGContext
中“获取”它。当
CGContext
被释放时,您的引用将无效。在这种情况下,您需要拥有对上下文的引用,直到不再需要指针。

NSData是原始缓冲区的对象包装器。“这样行吗?”麦克罗斯可能,我只需要更多的帮助。假设我这样做:
NSData*myNSData=[[NSData alloc]initWithBytes:data length:sizeof(data)]如何使用NSData访问
数据[索引]
?谢谢。这正是我需要理解的部分。