2011-09-15 3 views
0

이 내 코드의 dealloc UILabel의

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index 
{ 
    MWFeedItem *item = [reader.feedItems objectAtIndex:index]; 

    //INIZIALIZZO L'ARRAY CARICANDOLO DAL FILE!!!! 
    //[reader.feedItems initWithContentsOfFile:[[NSDictionary alloc] initWithContentsOfFile:@"Library/NewsPad"]]; 

    //create a numbered view 
    UIView *view = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"page_iPhone_Vertical.png"]] autorelease]; 

    CGRect frame = CGRectMake(40, 118, 228, 100); 

    UILabel *labelTitle = [[UILabel alloc] initWithFrame:frame]; 
    labelTitle.backgroundColor = [UIColor clearColor]; 
    labelTitle.textAlignment = UITextAlignmentLeft; 
    labelTitle.font = [UIFont fontWithName:@"Helvetica-Bold" size:12]; 
    labelTitle.numberOfLines=3; 
    [view addSubview:labelTitle]; 

    labelTitle.text = item.title; 

    [view addSubview:labelTitle]; 

    /* DATA 
    RSSEntry *entry = [_allEntries objectAtIndex:index]; 

    NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    NSString *articleDateString = [dateFormatter stringFromDate:entry.articleDate]; 
    */ 

    NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; 
    NSInteger loadImage=[settings objectForKey:@"loadImage"]; 

    /******** Get the image **********/ 
    NSString *url = [self getFirstImage:item.summary]; 
    //NSString *url = item.image; 

    if (loadImage != 0 && url != nil) { 
     //Create a managed image view and add it to the cell (layout is very naieve) 

     image = [[EGOImageView alloc] initWithPlaceholderImage:[UIImage imageNamed:@"loading.png"]]; 
     image.frame = CGRectMake(45, 200, 210, 150); 
     [view addSubview:image]; 
     image.imageURL = [NSURL URLWithString:url]; 

     /* OLD!!! 
     HJManagedImageV *image; 
     image = [[[HJManagedImageV alloc] initWithFrame:CGRectMake(45, 200, 210, 150)] autorelease]; 
     image.tag = 999; 

     [view addSubview:image]; 

     //set the URL that we want the managed image view to load 
     image.url = [NSURL URLWithString:url]; 

     //tell the object manager to manage the managed image view, 
     //this causes the cached image to display, or the image to be loaded, cached, and displayed 
     [objMan manage:image]; 
     */ 

     frame= CGRectMake(40, 205, 230, 400); 
     UILabel *desc = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
     desc.numberOfLines=6; 
     desc.backgroundColor = [UIColor clearColor]; 
     //desc.textAlignment = UITextAlignmentCenter; 
     desc.font = [desc.font fontWithSize:12]; 
     [view addSubview:desc]; 
     //SETTO DESCRIPTION 

     //rimuovo tag html 
     NSString *descrizione=[item.summary stringByConvertingHTMLToPlainText]; 
     /* DEBUG 
     NSString *descrizione=item.summary; 

     */ 
     [desc setText:descrizione]; 

     //NSLog(item.summary);  
    } 
    else { 
     frame= CGRectMake(40, 90, 235, 400); 
     UILabel *desc = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
     desc.numberOfLines=15; 
     desc.backgroundColor = [UIColor clearColor]; 
     //desc.textAlignment = UITextAlignmentCenter; 
     desc.font = [desc.font fontWithSize:12]; 
     [view addSubview:desc]; 
     //SETTO DESCRIPTION 
     //rimuovo tag html 
     NSString *descrizione=[item.summary stringByConvertingHTMLToPlainText]; 
     /* DEBUG 
     NSString *descrizione=item.summary; 
     */ 
     [desc setText:descrizione]; 
    } 

    return view; 
} 

왜 내 코드 [labelTitle 자료] 또는 [내림차순 자료] 앱 crashs를 추가하는 경우?

+0

볼 수'두 번? –

+0

오류입니다 ... 죄송합니다 : D –

답변

3

많은 질문이 있습니다.

labelTitle은 내가 본 코드에서 잘 보이지만 desc는 자동 렌더링 된 객체입니다.

UILabel *desc = [[[UILabel alloc] initWithFrame:frame] autorelease]; 

그것은 하나의 보유 수를 가지고 있지만, (변수가 범위를 벗어나 일반적 직후) 그 시간에 미래의 어느 시점에서 카운트를 유지 감소되는 오토 릴리즈되었습니다. 그래서 그것을 공개해야 할 이유가 없습니다.

NSAutoReleasePool on apple's docs에 대한 자세한 내용을 볼 수 있습니다. 당신이`[보기 addSubview를 : labelTitle] 호출하는 이유는

또한 How does the NSAutoreleasePool autorelease pool work?

+0

답을 보내 주셔서 감사합니다 !! 그래서 만약 내가 이해할 수있는 유일한 시스템은 autorelase 개체를 릴리스 할 수 있습니까? –

+0

모든 스레드에 NSAutoReleasePool *이 있어야합니다. 객체에서'autorelease' 메시지를 호출하면 자동 해제 풀에 추가됩니다. 가끔씩 수영장은 자동 배출되는 모든 물체를 제거하거나 청소합니다. 메인 스레드는 UIEvents를 처리하는 메시지 펌프를 가지고 있으며 UIEvents간에이 풀을 유출합니다. 이것은 내가 그것을 이해하는 방법입니다. – Sam

+0

샘 너무 많이 감사합니다 샘 ... 내 코드의 다른 모든 객체가 올바르게 할당 해제 되었습니까? 내 함수에 의해 반환 된 뷰는 시스템에 의해 자동으로 할당 해제 되었습니까? –