我正在尝试使用:
显示UIView子类-(void)pushChatNewMessage:(id)sender
{
NSNotification *not = (NSNotification *)sender;
NSNumber *num = (NSNumber *)not.object;
OTChatMessageBox *chatMessageBox = [[OTChatMessageBox alloc] init];
chatMessageBox.frame = CGRectMake(123, 60, 778, 208);
chatMessageBox.toId = [num intValue];
[UIView beginAnimations:@"animationChatBox" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:chatMessageBox cache:YES];
[self.view addSubview:chatMessageBox];
[UIView commitAnimations];
[chatMessageBox release];
}
问题是我收到了这个错误:
modifiying layer that is being finalized
我在调试中发现,调用OTChatMessageBox对象的dealloc方法只是结束了这个方法。
如果我删除对象的释放,一切正常......漏洞很大......
我查看了OTChatMessageBox的init方法并且非常简单,只有textView对象和带通知调用的按钮。
我缺少什么?
提前致谢;)
- 编辑 -
-(id)init
{
self = [super init];
if (self)
{
self = [[[NSBundle mainBundle] loadNibNamed:@"OTChatMessageBox" owner:self options:nil] objectAtIndex:0];
[txtMessage becomeFirstResponder];
}
return self;
}
答案 0 :(得分:1)
loadNibNamed:
会返回autorelease
'd NSArray
个对象。因此,当您从OTChatMessageBox
获取autorelease
时,alloc/init
为release
。这意味着您的结尾init
导致过度发布。问题是self = [super init];
方法应该返回一个对象,预期调用者将拥有该对象。
alloc
是一个内存泄漏,因为你从不使用返回的对象而你没有释放它,因为你已经self = [super init];
[self release];
... grab stuff from nib
已经应该释放它了。在这种情况下,你需要像
alloc/init
这当然是一个不必要的{{1}},你可能希望重新思考你是如何做到这一点