2011-02-10 12 views
1

我的问题是在下面的代码。我想了解当涉及到“无符号字符”指针时是否存在“保留”这样的事情。请解释。需要使用“无符号的字符”时,了解内存管理指向原始数据缓冲区

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

} 
+0

NSData的为原始缓冲区的对象的包装。会这样吗? – mackross 2011-02-10 23:53:37

+0

@mackross可能,我只需要更多的帮助。比方说,我这样做:`NSData的* myNSData = [[NSData的页头] initWithBytes:数据长度:的sizeof(数据)];'我将如何访问与NSData的`数据[指数]`? – anna 2011-02-11 00:41:44

回答

0

不,不存在“保留”原始指针的情况。

由于mackross说,NSData时,可以使用你自己动手分配扶住数据。但是,在这种情况下,您不拥有数据,您只是从拥有它的CGContext“获取”它。 CGContext发布时,您的参考将无效。在这种情况下,您需要拥有对上下文的引用,直到不再需要指针为止。