在非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-14 15:07 | 不及格的程序员-八神
@ 为了谁
请教一下,为什么视图已经在delloc中了,它还会访问用CALayer的delegate呢?
请教一下,为什么视图已经在delloc中了,它还会访问用CALayer的delegate呢?
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.
我们在程序设计中也要注意传指针。