2014-02-06 4 views
0

Я создаю ячейку таблицы справочника в своем приложении, и у меня есть 7 страниц, каждая из которых является изображениями, и я использую uiscrollview с контролем страниц, но когда я запускаю приложение, он говорит о предупреждении о принимаемой памяти. , а затем приложение замерзает и автоматически отключается, что мне делать, и это мой код.Предупреждение о наличии памяти. в разделе галереи Xcode

@interface HS_HandbookViewController() 
    @property (nonatomic, strong) NSArray *pageImages; 
    @property (nonatomic, strong) NSMutableArray *pageViews; 

    - (void)loadVisiblePages; 
    - (void)loadPage:(NSInteger)page; 
    - (void)purgePage:(NSInteger)page; 
    @end 

    @implementation HS_HandbookViewController 
    @synthesize scrollView = _scrollView; 
    @synthesize pageControl = _pageControl; 

    @synthesize pageImages = _pageImages; 
    @synthesize pageViews = _pageViews; 

    #pragma mark - 

    - (void)loadVisiblePages { 
     // First, determine which page is currently visible 
CGFloat pageWidth = self.scrollView.frame.size.width; 
NSInteger page = (NSInteger)floor((self.scrollView.contentOffset.x * 2.0f + pageWidth)/(pageWidth * 2.0f)); 

// Update the page control 
self.pageControl.currentPage = page; 

// Work out which pages we want to load 
NSInteger firstPage = page - 1; 
NSInteger lastPage = page + 1; 

// Purge anything before the first page 
for (NSInteger i=0; i<firstPage; i++) { 
    [self purgePage:i]; 
} 
for (NSInteger i=firstPage; i<=lastPage; i++) { 
    [self loadPage:i]; 
} 
for (NSInteger i=lastPage+1; i<self.pageImages.count; i++) { 
    [self purgePage:i]; 
} 
    } 

    - (UIImage *)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize { 
UIGraphicsBeginImageContext(newSize); 
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 

    } 



    - (void)loadPage:(NSInteger)page { 
if (page < 0 || page >= self.pageImages.count) { 
    // If it's outside the range of what we have to display, then do nothing 
    return; 
} 

// Load an individual page, first seeing if we've already loaded it 
UIView *pageView = [self.pageViews objectAtIndex:page]; 
if ((NSNull*)pageView == [NSNull null]) { 
    CGRect frame = self.scrollView.bounds; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0.0f; 

    UIImageView *newPageView = [[UIImageView alloc] initWithImage:[self.pageImages     objectAtIndex:page]]; 
    newPageView.contentMode = UIViewContentModeScaleAspectFit; 
    newPageView.frame = frame; 
    [self.scrollView addSubview:newPageView]; 
    [self.pageViews replaceObjectAtIndex:page withObject:newPageView]; 
} 
    } 

    - (void)purgePage:(NSInteger)page { 
if (page < 0 || page >= self.pageImages.count) { 
    // If it's outside the range of what we have to display, then do nothing 
    return; 
} 

// Remove a page from the scroll view and reset the container array 
UIView *pageView = [self.pageViews objectAtIndex:page]; 
if ((NSNull*)pageView != [NSNull null]) { 
    [pageView removeFromSuperview]; 
    [self.pageViews replaceObjectAtIndex:page withObject:[NSNull null]]; 
} 
    } 


    #pragma mark - 

    - (void)viewDidLoad { 
[super viewDidLoad]; 

self.title = @"Student Handbook"; 

// Set up the image we want to scroll & zoom and add it to the scroll view 
self.pageImages = [NSArray arrayWithObjects: 
        [UIImage imageNamed:@"page 1 handbook.png"], 
        [UIImage imageNamed:@"page 2 handbook.png"], 
        [UIImage imageNamed:@"page 3 hand book.png"], 
        [UIImage imageNamed:@"page 4 handbook.png"], 
        [UIImage imageNamed:@"page 5 handbook.png"], 
        [UIImage imageNamed:@"page 6 handbook.png"], 
        [UIImage imageNamed:@"page 7 handbook.png"], 
        nil]; 

NSInteger pageCount = self.pageImages.count; 

// Set up the page control 
self.pageControl.currentPage = 0; 
self.pageControl.numberOfPages = pageCount; 

// Set up the array to hold the views for each page 
self.pageViews = [[NSMutableArray alloc] init]; 
for (NSInteger i = 0; i < pageCount; ++i) { 
    [self.pageViews addObject:[NSNull null]]; 
} 
    } 

    - (void)viewWillAppear:(BOOL)animated { 
[super viewWillAppear:animated]; 

// Set up the content size of the scroll view 
CGSize pagesScrollViewSize = self.scrollView.frame.size; 
self.scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * self.pageImages.count,   pagesScrollViewSize.height); 

// Load the initial set of pages that are on screen 
[self loadVisiblePages]; 
    } 

    - (void)viewDidUnload { 
[super viewDidUnload]; 

self.scrollView = nil; 
self.pageControl = nil; 
self.pageImages = nil; 
self.pageViews = nil; 
    } 

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation         { 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
    } 


    #pragma mark - UIScrollViewDelegate 

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
// Load the pages which are now on screen 
[self loadVisiblePages]; 
    } 

    @end 

ответ

0

Прежде всего убедитесь, что вы не еще приложений, работающих (двойное нажатие на домашней кнопки и Флик все запущенные приложения, чтобы закрыть). Возможно, изображения большие, и на вашем устройстве недостаточно памяти. Если вы можете запустить приложение после его попытки выяснить, нет ли утечек памяти. Проведите несколько раз и следуйте за своей памятью.

enter image description here

Если вы используете ARC, чем присвоить ноль вашего Варса, так как вы не собираетесь их использовать.

Смежные вопросы