1
我在子類UIImageview中有一個CGMutablePathRef屬性。當我創建一個新路徑並將其分配給屬性時,CGPathRelease在我調用CGPathContainsPoint時會導致錯誤。如果我沒有發佈代碼工作正常的路徑,但有泄漏。我如何正確轉讓所有權和發佈權?使用CGPathRelease釋放路徑導致BAD_ACCESS
.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.
這是一個夢幻般的答案,並幫助我在很多方面。我不確定如何妥善保留這一點。謝謝你:) – user973984
NP ;-)值得一提的是,CF *和CG *結構都是'id'類型,它會幫助你很多。 – 2011-12-03 18:33:15
作爲一個小點,並不是說Core基礎類型是有效的Objective-C對象,而是基礎CFType橋接到NSObject,正如Mike Ash在這裏解釋的:http://www.mikeash.com/pyblog/friday- qa-2010-01-22-toll-free-bridging-internals.html和Ken Ferry在他的答案中提到:http://stackoverflow.com/a/1539634/19679。 –