我有一个iPad应用程序,这是儿童书。您通过调用此操作从一个页面导航到下一个页面,该操作必须淡出当前页面并在下一页中淡出,然后使用NSArray的下一行填充三个堆栈UIImageViews,以便它准备完成该操作下一页:
-(void)delayedMethod{
[leftButton setAlpha:1];
[pageImageNext setAlpha:0];
[pageImage setAlpha:1];
[pageImageBack setAlpha:1];
NSString *imageExtension = @".jpg";
NSString *audioExtension = @".wav";
if (activePage == thePages.count/3)
{
activePage = 1;
}
else
{
activePage = activePage + 1;
}
NSInteger row = 0;
if(activePage == 0)
{
row = activePage;
}
else
{
row = ((activePage) * 3);
}
[leftButton setAlpha:1];
pageImageBack.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@", [thePages objectAtIndex:row+0], imageExtension]];
pageImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@", [thePages objectAtIndex:row+1], imageExtension]];
pageImageNext.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@", [thePages objectAtIndex:row+2], imageExtension]];
[UIImageView beginAnimations:NULL context:NULL];
[UIImageView setAnimationDuration:.5]; // you can set this to whatever you like
/* put animations to be executed here, for example: */
[leftButton setAlpha:0];
[rightButton setAlpha:0];
[leftButton setAlpha:1];
[rightButton setAlpha:1];
leftButton.hidden = NO;
/* end animations to be executed */
[UIImageView commitAnimations]; // execute the animations listed above
[imageExtension release];
}
NSArray加载到此操作中,该操作在ViewDidLoad中调用:
-(void)loadPages
{
thePages = [[NSArray alloc] initWithObjects:
// How many stacked images do we need to get fade in and outs? Also add column fo
@"page0",@"page0",@"page1",
@"page0",@"page1",@"page2",
@"page1",@"page2",@"page3",
@"page2",@"page3",@"page4",
@"page3",@"page4",@"page5",
@"page4",@"page5",@"page6",
@"page5",@"page6",@"page7",
@"page6",@"page7",@"page8",
@"page7",@"page8",@"page9",
@"page8",@"page9",@"page10",
@"page9",@"page10",@"page11",
@"page10",@"page11",@"page12",
@"page11",@"page12",@"page13",
@"page12",@"page13",@"page14",
@"page13",@"page14",@"page15",
@"page14",@"page15",@"page16",
@"page15",@"page16",@"page17",
@"page16",@"page17",@"page18",
@"page17",@"page18",@"page19",
@"page18",@"page19",@"page20",
@"page19",@"page20",@"page21",
@"page20",@"page21",@"page22",
@"page21",@"page22",@"page23",
@"page22",@"page23",@"page24",
@"page23",@"page24",@"page25",
@"page24",@"page25",@"page26",
@"page25",@"page26",@"page27",
@"page26",@"page27",@"page27",
nil];
}
当我开始在控制台中收到内存警告并且通常是崩溃时,一切正常,直到大约10-12页。
我很确定这只是在正确的时间发布三个大型UIImageViews的问题,但我无法弄清楚...我在代码中尝试了很多不同的地方。
答案 0 :(得分:1)
我正在做一个像这样的应用程序,我有很多用户可以更改的图像视图和标签。我一直收到警告和崩溃。似乎解决这一切的唯一一件事就是让它们成为所有属性。我想要在某个视图上留下的所有东西我都要做一个属性。很好地照顾它,否则看起来操作系统吓坏了我必须分配很多,并且会发送内存警告,这将释放东西,然后当应用程序试图访问它们时它会崩溃。看看是否使pageImageNext,pageImage,pageImageBack属性有效。
答案 1 :(得分:0)
确保您在视图控制器的[thePages release]];
方法中执行dealloc
。不释放肯定会导致内存问题。
您是否还在视图控制器中保留了imageviews保留的属性?如果是这样,您还需要在dealloc
中发布它们。
对于内存警告,您可以在didRecieveMemoryWarning
中取消设置图像视图,然后添加一个检查以根据需要重新创建它们。
答案 2 :(得分:0)
代码:
[imageExtension release];
不正确,应删除。 “imageExtension”在堆栈上分配,并在方法退出时消失。只发布已分配的内容。
您是否只有这些类型的ViewControllers中的一种?或每页一个?
答案 3 :(得分:0)
@sasquatch @YuzaKen @MishieMoo如果我只是设置self.pageImage = nil;在dealloc中,如你所建议的那样,当用户离开ViewController时,它不会只释放内存吗?
当我向下移动数组的行时,我觉得我需要释放UIImageViews,当我用新图像替换UIImageView的内容时,不是吗?