在非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)dealloc10 { 11 [needle_ release];12 [needleLayer release];13 [super dealloc]; //crash14 }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).