我的retainCount正在增加?

Yah*_*hia 2 memory iphone dealloc retaincount popviewcontrolleranimated

我正在尝试构建rss阅读器,当用户完成阅读artical并按回dealloc时不会调用的问题

我得到了retainCount 6和7次!

我有很多自定义面板

当按下后退按钮时,视图是poped并且没有dealloc被称为?!

.h文件:

 @interface ArticalViewController : UIViewController<UIWebViewDelegate,UIScrollViewDelegate,UIActionSheetDelegate,ArticalBottomPanelDelegate,ArticalContentFetcherDelegate> {

    UIWebView * description_;
    UIActivityIndicatorView * ind_;
    ArticalModel * artical_;
    NSString * content;
    UIButton * faceBookShareBtn_;

     UIBarButtonItem * btnSharePanel_;


     CustomTopToolBar * topToolbar_;

     ArticalBottomPanel* articalBottomPanel_;
     MovingSharePanel * movingSharePanel_;

     int fontSize;
     BOOL favoStatus;
     ArticalContentFetcher *datafetcher_;     

 }


@property (nonatomic,retain) IBOutlet UIWebView * description;
@property (nonatomic,retain ) IBOutlet UIActivityIndicatorView * ind;
@property (nonatomic,retain) ArticalModel * artical;
@property (nonatomic,retain) IBOutlet UIButton * faceBookShareBtn;


@property (nonatomic,retain) IBOutlet  CustomTopToolBar * topToolbar;
@property (nonatomic , retain) IBOutlet ArticalBottomPanel * articalBottomPanel;
@property (nonatomic , retain) IBOutlet MovingSharePanel * movingSharePanel;

@property (nonatomic , retain) ArticalContentFetcher *datafetcher;




-(void) loadArtical:(ArticalModel * )artical;
- (void) loadArticalContentFromInternet;
-(void) changeFavoriteBtnIcon:(BOOL) status;
-(void)backBtnPressed:(id) sender;

-(IBAction)openPostBtnPressed:(id)sender;

@end
Run Code Online (Sandbox Code Playgroud)

.m文件:

    #import "ArticalViewController.h"


    @implementation ArticalViewController


    @synthesize description=description_;
    @synthesize artical=artical_; 
    @synthesize ind=ind_;

    @synthesize  faceBookShareBtn=faceBookShareBtn_;

    @synthesize topToolbar=topToolbar_;
    @synthesize articalBottomPanel=articalBottomPanel_;
    @synthesize movingSharePanel=movingSharePanel_;
    @synthesize datafetcher=datafetcher_;

    - (void)dealloc
    {
        NSLog(@"ArticalViewController : dealloc");
        [description_ release];
        [ind_ release];
        [artical_ release];
        [content release];
        [faceBookShareBtn_ release];

        [btnSharePanel_ release];


        [topToolbar_ release];

        [articalBottomPanel_ release];
        [movingSharePanel_ release];
        [datafetcher_ release];

        [super dealloc];
    }

    #pragma mark -
    #pragma mark - View lifecycle

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        fontSize=100;


        [self.articalBottomPanel setDelegate:self];
        [self.movingSharePanel setArtical:self.artical];
        [self.movingSharePanel setParentView:self];


        [self.topToolbar.rightButon setFrame:CGRectMake(260 , 3,  50, 30)];
        [self.topToolbar.rightButon addTarget:self action:@selector(backBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
        [self.topToolbar.rightButon setImage:[UIImage imageNamed:@"back-button"] forState:UIControlStateNormal];

        [self.topToolbar.leftButon setFrame:CGRectMake(10 , 3,  50, 30)];
        [self.topToolbar.leftButon setImage:[UIImage imageNamed:@"button-toolbar-post-link"] forState:UIControlStateNormal];
         [self.topToolbar.leftButon addTarget:self action:@selector(openPostBtnPressed:) forControlEvents:UIControlEventTouchUpInside];


        self.topToolbar.label.text =self.artical.category;
      //  [label release];

        //Navigation Buttons
        self.navigationItem.hidesBackButton=YES;

        //Check if artical is favorited or not
        [self changeFavoriteBtnIcon:[Favorites chechArtical:self.artical]];



        [self.description setBackgroundColor:[UIColor clearColor]];
        [self.description setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"1px-post-views-background"]]];

        if([[self.artical content] length] >1){
            NSLog(@"[[self.artical content] length] >1");
           [self loadArtical:self.artical];
        }else {
            NSLog(@"else");
            self.datafetcher=[[ArticalContentFetcher alloc ]init ];
            [self.datafetcher setArticalContentFetcherDelegate:self];
             [NSThread detachNewThreadSelector:@selector(loadArticalContentFromInternet) toTarget:self withObject:nil];

        }




    }
    #pragma mark -
    #pragma mark ArticalConnectionFeed Delegate Methods
    -(void) articalContentConnectionDoneWithArtical:(ArticalModel *)artical {
        NSLog(@"articalContentConnectionDoneWithArtical");
        [self loadArtical:artical];
    }
    -(void) articalContentConnectionFailed{
        NSLog(@"articalContentConnectionFailed");

    }
    #pragma mark -
    #pragma mark ArticalBottomPanelDelegate Delegate Methods

    -(void) openPanelFired{
        NSLog(@"openPanelFired");
        [self.movingSharePanel movePanel];
      //  [self.articalBottomPanel.btnOpenSharePanel setHidden:YES];
    }

    -(void) fontBtnFired:(int)font{
       // NSLog(@"fontBtnFired : %d",font);
        if(font==1){
            [self.description stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '90%'"];
        }else {
            [self.description stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '-10%'"];
        }
    }
    -(void) favoBtnFired {
        NSLog(@"favoBtnFired");
        favoStatus=[Favorites processArtical:self.artical];
        [self changeFavoriteBtnIcon:favoStatus];
    }

    -(void) changeFavoriteBtnIcon:(BOOL) status{
        if (status){
            [self.articalBottomPanel.btnFavo setImage: [UIImage imageNamed:@"active-star.png"] forState:UIControlStateNormal];

        }else {
            [self.articalBottomPanel.btnFavo setImage: [UIImage imageNamed:@"star.png"] forState:UIControlStateNormal];
        }
    }
    #pragma mark -
    #pragma mark UIWebView Delegate Methods
    -(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
        if([InternetConnection getInternetStatus]){
            if ( inType == UIWebViewNavigationTypeLinkClicked ) {
                [[UIApplication sharedApplication] openURL:[inRequest URL]];
                return NO;
            }
            return YES;
        }else {
            [InternetConnection ShowNoInternetAlert];
            return NO;
        }


    }

    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        [self.ind stopAnimating];
    }


    #pragma mark -
    #pragma mark Class Methods
    -(void) loadArtical:(ArticalModel * )artical{
        NSLog(@"loadArtical");
        [self.artical setContent:[artical content]];
        [self.artical setCategory:[artical category]];


        NSString * style=[[NSString alloc ] initWithFormat:@"<style> #offline img{display:none;} .wrap{text-align:right;line-height:22px; direction:rtl;} .title{font-size:20px;margin-bottom:5px;} .date{font-size:13px;} .cat{font-size:13px;} </style>"];

        if([InternetConnection getInternetStatus])
            NSLog(@"[InternetConnection getInternetStatus] : true");
        content=[[NSString alloc] initWithFormat:@"%@<div class='wrap' ><div class='title'>%@</div><div class='date'>%@</div><div class='cat'>%@</div>%@</div>",style,[self.artical title],[DateProcessor getInternetDateAndTimeForArticals:self.artical.pubDate],[self.artical category],[self.artical content] ];
        [ self.description loadHTMLString:content baseURL:[NSURL URLWithString:@""]];

        [style release];
    }

    - (void) loadArticalContentFromInternet{
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        [self.datafetcher loadArticlContentWithID:self.artical.ID];
        [[NSRunLoop currentRunLoop] run ];
        [pool release];


    }
    -(void)backBtnPressed:(id) sender{
            NSLog(@"backBtnPressed");

        [self.navigationController popViewControllerAnimated:YES];


    }

    #pragma mark -
    #pragma mark IBActions      


    -(IBAction)openPostBtnPressed:(id)sender{
        if([InternetConnection getInternetStatus]){
            [InternetConnection openExternalUrl:self.artical.link];
        }else{
            [InternetConnection ShowNoInternetAlert];
        }


    }

    @end
Run Code Online (Sandbox Code Playgroud)

增加:

当我调用我使用过的Artical时

avc=[[ArticalViewController alloc]initWithNibName:@"ArticalViewController" bundle:nil];
    avc.artical=[self.feeds objectAtIndex:indexPath.row]; 
    [self.navCon pushViewController:avc animated:YES];

    [avc release]; 
Run Code Online (Sandbox Code Playgroud)

Joh*_*who 41

我发现追踪保留计数和缺少保留 - 释放对的最佳方法是使用Instruments.点击个人资料(Cmd ⌘+ I)并选择泄漏模板.即使不会自动发现泄漏,也会记录保留更改,因此您可以手动跟踪其他保留.为此,请在选择分配工具时在" 对象摘要"中查找您的类名.如果找不到,则表示所有实例都已取消分配.否则,单击选择类名时出现的箭头: 选择类名,然后单击箭头以查看活动实例 您将看到您班级的所有生活实例: 选择实例并单击箭头以查看其保留/版本

如果您认为某些实例应该已经解除分配,请选择一个并单击对象地址旁边的箭头.现在,您应该看到使用执行此操作的方法名称在此对象上调用的任何保留或释放: 双击以查看调用此保留/释放的代码行

RefCt列显示调用操作后的retainCount,当您双击任何保留/释放时,乐器将显示执行此操作的代码行: 责任线突出显示

如您所见,对象被添加到数组中,并且永远不会从中删除.

根据我的经验,这是找到泄漏仪器不会自动检测到的内存泄漏的最快速,最简单的方法.我认为另一个好的做法是在对象摘要中查看#Living以确保生存实例的数量完全符合您的预期.


NSR*_*der 9

您没有理由关心保留计数是什么.只需确保平衡您的保留和发布.


nev*_*ing 5

看起来很奇怪,retainCount根本没有用来计算您的保留期.事情变得保留其他原因比你打电话[myObject retain][[MyClass alloc] init]等.

最好忽略retainCount并学习内存管理规则.retainCount会让你更加困惑.如果您只为iOS 5开发,最好忘记内存管理并使用ARC.