编辑2。
由于肯 ,这是现在的工作。 我甚至想,我明白为什么:-)
下面是修改后的行:
- (void) reCreatePath {
CGMutablePathRef p = ::CGPathCreateMutable() ;
::CGPathMoveToPoint (p, 0, TL.x, TL.y) ;
// [snip]
::CGPathAddLineToPoint (p, 0, BL.x, BL.y) ;
::CGPathCloseSubpath(p) ;
self.path = p ;
::CGPathRelease(p) ; // <<== THIS IS IT!! :-)
}
编辑。
我仍然不明白这一点。 我想查克建议:
@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef path ;
像这样:
@interface TopLeftSlidingView ()
@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef path ;
@end
并在地步,我重新创建CGPath:
- (void) reCreatePath {
CGMutablePathRef p = ::CGPathCreateMutable() ;
::CGPathMoveToPoint (p, 0, TL.x, TL.y) ;
// [snip]
::CGPathAddLineToPoint (p, 0, BL.x, BL.y) ;
::CGPathCloseSubpath(p) ;
// self.path = (__bridge CGMutablePathRef) p ;
// self.path = (__bridge_transfer CGMutablePathRef) p ;
// self.path = (__bridge_retained CGMutablePathRef) p ;
self.path = p ;
}
无论是在编译器错误三个注释掉行的结果。 非注释行确实编译,但产生一个分析器警告:
/Users/verec/Projects/WordGame/WordGame/classes/TopLeftSlidingView.mm:211:26:
Call to function 'CGPathCreateMutable' returns a Core Foundation object with
a +1 retain count
其次是:
/Users/verec/Projects/WordGame/WordGame/classes/TopLeftSlidingView.mm:225:5:
Object leaked: object allocated and stored into 'p' is not referenced later
in this execution path and has a retain count of +1
我就是不明白 :(
考虑:
@interface Test : NSObject
@property (nonatomic, assign) CGColorRef color ;
@end
@implementation Test
- (void) dealloc {
if (self.color) {
::CGColorRelease(self.color) ;
self.color = 0 ;
}
}
- (id) init {
if (self = [super init]) {
self.color = ::CGColorRetain([UIColor blueColor].CGColor) ;
}
return self ;
}
@end
这一切都编译(貌似运行)的罚款只是分析报告保持警告。
从本质上讲这是什么代码是说的是:“请ARC,也懒得做任何事情都具有color
,请善待它,你会对待任何其他方式assign
财产,是它的一个BOOL或CGFloat的,我处理内存管理全部由我自己!”
除了ARC不肯听我的话,仍然抱怨!
我在这里对SO读了很多问题,但他们都不来解决这个问题?
这里的关键,而编译器(虽然不是分析仪)似乎都同意,是通过声明属性`分配”我都声称自己处理这一切对我自己...
所以,我一定是错的,但我只是不明白为什么...
怎么了?