2010-11-20 19 views
0

UITable var ve bir satıra tıkladığımda, bir dizi resim yüklüyorum. BenUIImage imageWithData

UIImage *image = [UIImage imageWithData:data]; 

sorun önbellek kullanıldığı ve eğer hiçbir bellek serbest gibi hiç ben aynı satırda tıklayın zaman, görüntüler, belleğe yeniden tahsis olmasıdır ile görüntüler oluşturmak, böylece tahsis edilen bellek artmaya devam ediyor. (Müfettişin hem cihaz hem de emülatörde kullandığını görüyorum)

Her şeyi serbest bırakıyorum ve ayrıca clang ile her şey iyi görünüyor. Bir süre sonra uygulamanız çöküyor.

Herhangi bir öneri veya fikir?

DÜZENLEME: İşte

Sorunu oluşturuyor düşünüyorum kod kısmıdır:

UIView *main = [[[UIView alloc] initWithFrame:rectScrollView] autorelease]; 

    for (int i=0; i<[contentArray count]; i++) { 
     float targetWidth = rectScrollView.size.width; 
     float targetHeight = rectScrollView.size.height; 

     Link *tmp_link = [contentArray objectAtIndex:i]; 
     AsyncImageView* asyncImage = nil; 
     if(tmp_link!=nil){ 
      CGRect imageFrame = CGRectMake(targetWidth*i, 0, targetWidth, targetHeight); 
      //asyncImage = [[[AsyncImageView alloc] initWithFrame:imageFrame ] autorelease]; 
      asyncImage = [[AsyncImageView alloc] initWithFrame:imageFrame ]; 
      asyncImage.contentMode = UIViewContentModeScaleAspectFit; 
      NSURL* url = [NSURL URLWithString:[[IMG_SERVER_URL stringByAppendingString: tmp_link.url] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 
      [asyncImage loadImageFromURL:url]; 
      [self.scrollView addSubview:(UIImageView *)asyncImage]; 
      [asyncImage release]; 
     } 

     if ([tmp_link.caption length] > 0 && asyncImage!=nil) { 
      float marginTop = 25; 

      UILabel *caption = [[UILabel alloc] init]; 
      caption.text = tmp_link.caption; 
      caption.textAlignment = UITextAlignmentCenter; 
      caption.textColor = [UIColor whiteColor]; 
      caption.font = [UIFont systemFontOfSize:12]; 
      caption.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.4]; 

      CGRect captionFrame = CGRectMake((i * targetWidth), marginTop+10, targetWidth, 20.0f); 
      caption.frame = captionFrame; 
      [self.scrollView addSubview:caption]; 
      [caption release]; 
     } 
     //[asyncImage release]; 
    } 
    [main addSubview:scrollView]; 
    [scrollView release]; 
    if (pageControlEnabledTop) { 
     rectPageControl = CGRectMake(0, 5, scrollWidth, 15); 
    } 
    else if (pageControlEnabledBottom) { 
     //rectPageControl = CGRectMake(0, (scrollHeight - 25), scrollWidth, 15); 
     rectPageControl = CGRectMake(0, (scrollHeight), scrollWidth, 15); 
    } 
    if (pageControlEnabledTop || pageControlEnabledBottom) { 
     //pageControl = [[[UIPageControl alloc] initWithFrame:rectPageControl] autorelease]; 
     pageControl = [[UIPageControl alloc] initWithFrame:rectPageControl]; 
     pageControl.numberOfPages = [contentArray count]; 
     pageControl.currentPage = page; 
     [main addSubview:pageControl]; 
     [pageControl release]; 
    } 
    if (pageControlEnabledTop || pageControlEnabledBottom || rememberPosition) self.scrollView.delegate = self; 
    //if (margin) [margin release]; 
    return (UIScrollView *)main; 

Ve böyle kullanılır: Fark ettim

reviewImagesImage = [[IGUIScrollViewImage alloc] init]; 
     if([currentReview.linkScreenshots count]>0){ 

      //reviewImages 
      reviewImages = [[UIView alloc] init]; 

      //placing the images 
      CGRect frameImages = reviewImages.frame; 
      frameImages.origin.x = 10; 
      frameImages.origin.y = (infoView.frame.origin.y + infoView.frame.size.height + 10.0f); 
      frameImages.size.width = 300; 
      frameImages.size.height = 350.0f; 
      reviewImages.frame = frameImages; 
      reviewImages.backgroundColor = [UIColor clearColor]; 
      [reviewImagesImage setContentArray:currentReview.linkScreenshots]; 
      [reviewImagesImage setWidth:reviewImages.frame.size.width andHeight: reviewImages.frame.size.height]; 
      [reviewImagesImage enablePageControlOnBottom]; 
      [reviewImagesImage setBackGroudColor: [UIColor clearColor]]; 
      UIScrollView *tmp_sv = [reviewImagesImage getWithPosition:0]; 
      [reviewImages addSubview:tmp_sv]; 
      [self.view addSubview:reviewImages]; 
        [reviewImages release]; 
     } 

eğer reviewImagesImage uygulama kilitlenmeleri bırakmayı deneyin:/

+0

Daha fazla kod gönderebilir misiniz? Belki de verilerinizi bir yerde serbest bırakmadınız? – v01d

+0

"reviewImage" öğesini ne zaman bırakıyorsunuz? – tia

+0

İyi nokta, [self.view addSubview: reviewImages] 'den sonra yayın yapıyorum; [reviewImages sürümü]; – 0m4r

cevap

1

Tabi ki önbellek biziz ed çünkü yeni UIImage her zaman verilerden oluşturulacak. Hafıza kullanımı dediğiniz gibi önemli ölçüde artmışsa, büyük olasılıkla referansın yanlışlıkla bir yerde tutulması bizim hatamızdır.

+0

iyi, cevabınız için teşekkürler ... ama sorunun nasıl çözüleceğine dair bazı önerilerde umuyordum ... – 0m4r

+0

Daha fazla kod gönderilsin mi? Sızıntılarda mı? Muhtemelen yayınlanmayan UIImageView'a benziyor. Bu, eğer '-dealloc'da yayınlanmayan bir uçta yüklü bir IBOutlet ise meydana gelebilir. –

+0

Bu olduğunda, yanlış nereye gidebileceğimi bulmak için koduma bakıyorum. Eğer bu işe yaramazsa, başvurum tamamlanana kadar şüpheli bölümleri kaldırmayı denerdim, böylece suçlunun nerede olduğunu biliyorum. Kodunuzun daha fazlasını gönderebilmeniz mümkün ise, buradaki kişiler size yardımcı olabilir. – tia

0

image'nuzu imageWithData ile ayarladıktan sonra, image'u uygulama paketinde filepath'a kaydedin.