Iphone appDelegate方法,此时调用方不拥有的对象的引用计数递减错误
我遇到过这样一些帖子,Iphone appDelegate方法,此时调用方不拥有的对象的引用计数递减错误,iphone,ios,memory-leaks,appdelegate,Iphone,Ios,Memory Leaks,Appdelegate,我遇到过这样一些帖子,错误地将RC减量到+0,但没有一个帖子是appDelegate Method(根据我的知识,无法保留委派) 下面是我内存泄漏的代码 iPlayerAppDelegate *appDelegate = (iPlayerAppDelegate *)[[UIApplication sharedApplication] delegate]; int currentTabIndex = appDelegate.tabcontroller.tabBarControlle
错误地将RC减量到+0
,但没有一个帖子是appDelegate Method(根据我的知识,无法保留委派)
下面是我内存泄漏的代码
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];
iPlayerAppDelegate*appDelegate=(iPlayerAppDelegate*)[[UIApplication sharedApplication]delegate];
int currentTabIndex=appDelegate.tabcontroller.tabBarController.selectedIndex;
UIButton*btn=(UIButton*)发送方;
pageItem*selectedItem=nil;
selectedItem=[appDelegate.pageData.pageItems对象索引:btn.tag];
appDelegate.bStatusValue=FALSE;
如果(pageInfo.removeCaptureFile)
{
[appDelegate.commonUtils removeFileFromPath:@“snap.jpeg”];
[appDelegate.commonUtils removeFileFromPath:@“prevSnap.jpeg”];
}
如果(appDelegate.launchTimer&&[appDelegate.launchTimer有效])
{
[appDelegate.launchTimer invalidate];
appDelegate.launchTimer=nil;
//appDelegate.timerFlag=否;
}
NSArray*viewarray=[self.view子视图];
对于(int index=0;index
下面是内存泄漏的快照方法,该方法返回一个Objective-C对象,该对象的保留计数为+0,引用计数的递减率不正确,此时调用方不拥有该对象
我为什么会泄漏?我是否重新分配appDelegate对象
我没有对访问器(appDelegate)的返回值调用release,也没有将其设置为nil,我应该如何修复此泄漏
提前感谢我认为您应该阅读以下关于正确使用app delegate的帖子: 例如,在代码中:
selectedItem = [appDelegate.pageData.pageItems objectAtIndex:btn.tag];
看起来很混乱。可能更好的解决方案是使用单例设计模式
至于内存泄漏,请检查您的应用程序代理动画执行动画停止回调时是否未保留任何内容。我知道不应保留代理,我也没有保留代理。如果您能找出我出现泄漏的原因,请发布解决方案