Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 收到内存警告。在库段Xcode中_Ios_Objective C_Xcode_Uiscrollview - Fatal编程技术网

Ios 收到内存警告。在库段Xcode中

Ios 收到内存警告。在库段Xcode中,ios,objective-c,xcode,uiscrollview,Ios,Objective C,Xcode,Uiscrollview,我正在我的应用程序中制作一个手册表格单元格,我有7个页面,每个页面都是图像,我使用带有页面控件的uiscrollview,但当我运行应用程序时,它会显示收到内存警告。 然后应用程序冻结并自动关闭,我该怎么做,这是我的代码 @interface HS_HandbookViewController () @property (nonatomic, strong) NSArray *pageImages; @property (nonatomic, strong) NSMuta

我正在我的应用程序中制作一个手册表格单元格,我有7个页面,每个页面都是图像,我使用带有页面控件的uiscrollview,但当我运行应用程序时,它会显示收到内存警告。 然后应用程序冻结并自动关闭,我该怎么做,这是我的代码

    @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
@interface HS\u手册视图控制器()
@属性(非原子,强)NSArray*页面图像;
@属性(非原子,强)NSMutableArray*页面视图;
-(无效)加载可视页面;
-(无效)加载页:(NSInteger)页;
-(作废)清洗页:(NSInteger)页;
@结束
@实现HS_HandbookViewController
@综合滚动视图=_滚动视图;
@综合页面控制=_页面控制;
@合成页面图像=_页面图像;
@综合页面浏览量=_页面浏览量;
#布拉格标记-
-(无效)加载可视页面{
//首先,确定当前可见的页面
CGFloat pageWidth=self.scrollView.frame.size.width;
NSInteger页面=(NSInteger)地板((self.scrollView.contentOffset.x*2.0f+pageWidth)/(pageWidth*2.0f));
//更新页面控件
self.pageControl.currentPage=page;
//确定要加载的页面
NSInteger firstPage=第1页;
NSInteger lastPage=第+1页;
//清除第一页之前的任何内容

对于(NSInteger i=0;i首先确保您没有运行其他应用程序(双击“主页”按钮并轻弹所有正在运行的应用程序以关闭)。可能是图像太大,并且设备内存不足。如果您能够在应用程序运行后试着找出是否没有内存泄漏。轻扫几次,然后跟随内存

如果您使用ARC,则由于您不打算使用VAR,所以将nil分配给VAR