gpt4 book ai didi

objective-c - 使用 "unsigned char"指向原始数据缓冲区时需要了解内存管理

转载 作者:行者123 更新时间:2023-12-03 17:25:53 25 4
gpt4 key购买 nike

我的问题在下面的代码中。我想了解当涉及到“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 被释放时,您的引用将变得无效。在这种情况下,您需要拥有对上下文的引用,直到您不再需要该指针为止。

关于objective-c - 使用 "unsigned char"指向原始数据缓冲区时需要了解内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com