我遇到incorrect decrement of RC to +0
的帖子,但没有一个 appDelegate方法(根据我的知识委托不能保留)
以下是我有内存泄漏的代码
iPlayerAppDelegate *appDelegate = (iPlayerAppDelegate *)[[UIApplication sharedApplication] delegate];
int currentTabIndex = appDelegate.tabcontroller.tabBarController.selectedIndex ;
UIButton *btn = (UIButton *)sender;
pageItem* selectedItem = nil;
selectedItem = [appDelegate.pageData.pageItems objectAtIndex:btn.tag];
appDelegate.bStatusValue = FALSE;
if(pageInfo.removeCaptureFile)
{
[appDelegate.commonUtils removeFileFromPath:@"snap.jpeg"];
[appDelegate.commonUtils removeFileFromPath:@"prevSnap.jpeg"];
}
if (appDelegate.launchTimer &&[appDelegate.launchTimer isValid])
{
[appDelegate.launchTimer invalidate];
appDelegate.launchTimer = nil;
// appDelegate.timerFlag = NO;
}
NSArray *viewarray = [self.view subviews];
for(int index=0;index< viewarray.count;index++)
{
UIView *view = [viewarray objectAtIndex:index];
if([view isMemberOfClass:[UITextField class]] || [view isMemberOfClass:[UITextView class]])
{
[view resignFirstResponder];
[view removeFromSuperview];
}
if([view isMemberOfClass:[scrollwinView class]])
{
scrollwinView* scrollView = (scrollwinView*) view;
[scrollView stopTimer];
}
}
if(appDelegate.tabsupport)
{ //to remove the cached view from stack after pressing back
CSNavigationController *navcon= (CSNavigationController*)appDelegate.tabcontroller.tabBarController.selectedViewController;
[navcon removeViewData:pageInfo.screenId];
}
int currentscrid=pageInfo.screenId;
clrScreenId = pageInfo.clrScreenId;
if (appDelegate.connMgr)
{
[appDelegate.connMgr closeHttpStream];
//[connMgr release];
appDelegate.connMgr = nil;
appDelegate.connectionstatus = FALSE;
if(appDelegate.initAnimation.startId == 5)
{
appDelegate.transition = NO ;
[appDelegate readPageData:currentscrid isBack:NO ];
appDelegate.transition = YES;
return ;
}
[appDelegate stopAnimation];
这里是内存泄漏的快照方法返回一个具有+0保留计数的Objective-C对象,并且调用者不在此时拥有的对象的引用计数的不正确减少{ {0}}
为什么我会泄漏?我在重新分配appDelegate对象吗?
我没有在该访问者(appDelegate)的返回值上调用release,也没有将其设置为nil,我该如何解决这个漏洞?
先谢谢
答案 0 :(得分:-1)
我认为你应该阅读这个关于正确使用app delegate的帖子:
iPhone proper usage of Application Delegate
例如,在您的代码中:
selectedItem = [appDelegate.pageData.pageItems objectAtIndex:btn.tag];
看起来非常凌乱。一个可能更好的解决方案可能是使用单例设计模式。
至于你的内存泄漏,当你的app委托动画执行动画停止回调时,可能会检查你没有保留任何内容。