现在的位置: 首页 > 综合 > 正文

The property delegate of CALayer cause Crash.

2013年06月22日 ⁄ 综合 ⁄ 共 770字 ⁄ 字号 评论关闭

在非arc与arc的环境中使用时,导致程序crash.

 

 1 //当前类使用-fno-objc 编译
 2 
 3     needle_ = [[MyView alloc] init];
 4 
 5     needleLayer = [CALayer layer];    
 6     needleLayer.delegate = self.needle;
 7 
 8 
 9 - (void)dealloc
10 {    
11     [needle_ release];
12     [needleLayer release];
13     [super dealloc];   //crash
14 }
15     

 

 

1 -(void) drawLayer: (CALayer*) layer inContext: (CGContextRef) context  

 

he lightest-wight solution would be to create a small helper class in the the file as the UIView that's using the CALayer:

In MyView.h

@interfaceMyLayerDelegate:NSObject...@end

In MyView.m

@implementationMyLayerDelegate-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
{...}@end

Just place those at the top of your file, immediately below the #import directives. That way it feels more like using a "private class" to handle the drawing (although it isn't -- the delegate class can be instantiated by any code that imports the header).

抱歉!评论已关闭.