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

いいえ、生のポインターを「保持」するようなことはありません。

マクロスが言うように、NSData自分で割り当てるときにデータを保持するために使用できます。ただし、この場合、データを所有しているのではなく、データCGContextを所有する からデータを「取得」しているだけです。CGContextがリリースされると、参照は無効になります。この場合、ポインターが不要になるまで、コンテキストへの参照を所有する必要があります。

于 2011-02-11T00:09:55.563 に答える