这里那里,
我有一个自定义 UIView。此视图充当活动指示器,但作为 UIActivityIndicatorView 上方的标签。在初始化中,我添加了一个 CAGradientLayer。我分配并初始化它,并将它作为 UIView 层属性的子层插入到索引 0 处。在我的 dealloc 方法被调用时,我在控制台中收到一条消息:
- [CALayer release]: message sent to deallocated instance.
我的代码:
@interface LabelActivityIndicatorView ()
{
UILabel *_label;
UIActivityIndicatorView *_activityIndicatorView;
CAGradientLayer *_gradientLayer;
}
@end
@implementation LabelActivityIndicatorView
//dealloc
- (void) dealloc
{
[_label release];
[_activityIndicatorView release];
//even tried to remove the layer
[_gradientLayer removeFromSuperLayer];
[_gradientLayer release];
[super dealloc];
}
// init
- (id) initWithFrame:(CGRect)frame
{
if ( (self = [super initWithFrame:frame]) )
{
// init the label
// init the gradient layer
_gradientLayer = [[CAGradientLayer alloc] init];
[_gradientLayer setBounds:[self bounds]];
[_gradientLayer setPosition:CGPointMake(frame.size.width/2, frame.size.height/2)];
[[self layer] insertSublayer:_gradientLayer atIndex:0];
[[self layer] setNeedsDisplay];
}
return self;
}
@end
有人有想法么。因为我正在分配和初始化渐变层,所以我负责释放它。我应该能够分配和初始化并分配给一些 ivar。也许我应该创建一个带有保留的属性。
谢谢,