Objective c 使用时需要了解内存管理;“无符号字符”;指向原始数据缓冲区
我的问题在下面的代码中。我想了解,当涉及到“unsignedchar”指针时,是否存在“保留”这样的事情。请解释一下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
// 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访问数据[索引]
?谢谢。这正是我需要理解的部分。