1

我的问题在下面的代码中。我想了解在“unsigned char”指针方面是否存在“保留”之类的东西。请解释。

// 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;

}
4

1 回答 1

0

不,没有“保留”原始指针这样的事情。

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

于 2011-02-11T00:09:55.563 回答