在非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).

 

Feedback
 
2012-11-09 11:51 |  
needleLayer.delegate = nil;这句话写在dealloc中,因为CALayer中的delegate是assign的属性,这样你释放[needle_ release];后,deletate就是野指针了。在arc中如果有weak了,如果delegatej是weak的属性,就不会crash..

我们在程序设计中也要注意传指针。

  回复引用删除
2012-11-14 15:07 |  
@ 为了谁
请教一下,为什么视图已经在delloc中了,它还会访问用CALayer的delegate呢?

 

相关文章:

  • 2022-12-23
  • 2021-09-22
  • 2022-12-23
  • 2021-07-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-04
  • 2022-01-14
  • 2021-08-13
  • 2022-12-23
  • 2022-12-23
  • 2022-01-31
相关资源
相似解决方案