我有一个自定义的NSView对象,其中包含一个名为bgColor的保留属性。我通过定义setBgColor方法覆盖了setter方法:
- (void)setBgColor:(NSColor *)theColor
{
[bgColor autorelease];
bgColor = [theColor retain];
[self setNeedsDisplay:YES];
}
我还有另一个名为isOnline的函数:
-(void)isOnline:(BOOL)connected{
if(connected){
self.bgColor = onlineBackgroundColor;
} else {
self.bgColor = offlineBackgroundColor;
}
}
当我使用[self isOnline:NO]
在initWithFrame方法中调用isOnline方法时,它工作正常。但是当我尝试从控制对象调用isOnline方法时:
[theCustomedView isOnline:YES];
或theCustomedView.isOnline = YES;
它会在行的setBgColor方法中崩溃:bgColor = [theColor retain];
编译器抱怨程序收到信号:“EX_BAD_ACCESS”。我无法弄清楚为什么。那自动释放错了吗?
如果是这样,为什么我可以从控制对象[theCustomedView setBgColor:aColor];
和initWithFrame中的self调用它,它会正常工作?
有什么想法吗?
答案 0 :(得分:2)
您尝试在-retain
被销毁后发送给theColor
。检查它的来源。