我的问题在下面的代码中。我想了解“ 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;
}
最佳答案
不,没有“保留”原始指针之类的东西。
正如mackross所说,NSData
可以在您自己分配数据时保留数据。但是,在这种情况下,您不拥有数据,而只是从拥有它的CGContext
中“获取”它。释放CGContext
时,您的引用无效。在这种情况下,您需要拥有对上下文的引用,直到不再需要指针为止。