gpt4 book ai didi

iphone - 使用 CGPathRelease 释放路径导致 BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 17:40:25 24 4
gpt4 key购买 nike

我在子类 UIImageview 中有一个 CGMutablePathRef 属性。当我创建新路径并将其分配给属性时,CGPathRelease 在我调用 CGPathContainsPoint 时会导致错误。如果我不释放路径,代码可以正常工作,但存在泄漏。如何正确转让所有权和释放?

.h // UIImageView subclass
@property CGMutablePathRef pathHold;


.m
CGMutablePathRef myPath;
myPath = CGPathCreateMutable();
CGRect myRect2 = holderImageView.bounds;
float midX = CGRectGetMidX(myRect2);
float midY = CGRectGetMidY(myRect2);

CGAffineTransform t =
CGAffineTransformConcat(
CGAffineTransformConcat(
CGAffineTransformMakeTranslation(-midX, -midY),
CGAffineTransformMakeScale(holderImageView.pathZone,holderImageView.pathZone)),
CGAffineTransformMakeTranslation(midX, midY));
CGPathAddEllipseInRect(myPath, &t, myRect2);
CGPathCloseSubpath(myPath);

[holderImageView setPathHold:myPath];
CGPathRelease(myPath); // If path not released, works fine but leak.
[self addSubview:holderImageView];
[holderImageView release];


.m
if(CGPathContainsPoint (self.pathHold, NULL, touchLocation, FALSE )) // This Causes error.

最佳答案

您声明的属性没有 (retain) 属性。这意味着,当您将路径分配给此属性时,运行时仅执行指针分配并且不会保留您的路径,因此当您 CGPathRelease() 路径引用时,它会被释放。因此,您必须像这样在占位符图像类上声明属性:

@property (retain) id pathHold;

然后像这样赋值:

[holderImageView setPathHold:(id)myPath];

请注意,在声明中我使用“id”作为类型。这是因为几乎所有 CoreGraphics 和 CoreFoundation 类型实际上都是有效的 Objective-C 对象,因此可以完成此转换(免费桥接),并且仅需要类型转换以避免编译器警告。

关于iphone - 使用 CGPathRelease 释放路径导致 BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369448/

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