Memory 解聘后的记忆ModalviewController激活:是
我正在介绍一个模态视图控制器,它包含一个带有一组图像的UIScrollView。当我关闭我的模态视图控制器时,我可以在我的分配(仪器)中看到分配给图像的内存挂起,但不会导致泄漏 给我带来一些困惑和任何帮助都会很好。这是我所拥有的 UIViewController-DollViewController:这是我的主视图控制器,我正在演示我的模态。这是密码-Memory 解聘后的记忆ModalviewController激活:是,memory,uiviewcontroller,modalviewcontroller,Memory,Uiviewcontroller,Modalviewcontroller,我正在介绍一个模态视图控制器,它包含一个带有一组图像的UIScrollView。当我关闭我的模态视图控制器时,我可以在我的分配(仪器)中看到分配给图像的内存挂起,但不会导致泄漏 给我带来一些困惑和任何帮助都会很好。这是我所拥有的 UIViewController-DollViewController:这是我的主视图控制器,我正在演示我的模态。这是密码- -(IBAction)openDollCloset { NSLog(@"Open Closet"); [self play
-(IBAction)openDollCloset {
NSLog(@"Open Closet");
[self playSound:@"soundMenuClick"];
ClosetViewController *closet = [[ClosetViewController alloc] initWithNibName:@"ClosetViewController" bundle:nil];
closet.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController: closet animated: YES];
closet.delegate = self;
closet.addToCloset = NO;
[closet setCurrentDoll:myDoll];
[closet openCloset];
[closet release];
[self closeSubmenu];
}
我手动创建滚动视图来保存装备图像。
对象closetScroller是用@property(非原子,保留)UIScrollView*closetScroller定义的;在Dealoc中发布
- (void)setScrollerValues {
if (closetScroller == nil)
{
self.closetScroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
[self.closetScroller setDecelerationRate:UIScrollViewDecelerationRateFast];
[self.closetScroller setDelegate:self];
[self.closetScroller setPagingEnabled:YES];
[self.closetScroller setShowsHorizontalScrollIndicator:NO];
[self.view addSubview:closetScroller];
}
[self.closetScroller setContentSize:CGSizeMake(outfitCount * 320, 400)];
}
创建scrollView后,我将图像添加到滚动条中。我相信我释放的一切都是正确的。我正在使用NSData对象创建图像并将其发布
- (void)addOutfitsToScroller {
// Clear out any old images in case we just deleted an outfit
if ([[closetScroller subviews] count] > 0)
{
CATransition *fade = [CATransition animation];
[fade setDelegate:self];
[fade setType:kCATransitionReveal];
[fade setSubtype:kCATransitionFromRight];
[fade setDuration:0.40f];
[[self.closetScroller subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
[[closetScroller layer] addAnimation:fade forKey:@"FadeButtons"];
}
// Set the pageControl to same number of buttons
[pageControl setNumberOfPages:outfitCount];
// Load the outfit image and add it to the scroller
for (int i = 0; i < outfitCount; i++)
{
NSArray *savedDataArray = [[NSArray alloc] initWithArray:[closetItemsArray objectAtIndex:i]];
UIImageView *v = [[UIImageView alloc] initWithFrame:CGRectMake(320*i, 0, 320, 400)];
[v setUserInteractionEnabled:NO];
[v setAlpha:0.40f];
NSData *imageData = [[NSData alloc] initWithContentsOfFile:[savedDataArray objectAtIndex:1]];
UIImage *outfitImage = [[UIImage alloc] initWithData:imageData];
UIImageView *closetImage = [[UIImageView alloc] initWithImage:outfitImage];
[imageData release];
[outfitImage release];
[savedDataArray release];
CGSize frameOffset;
#ifdef LITE_VERSION
frameOffset = CGSizeMake(40, 60);
#else
frameOffset = CGSizeMake(20, 10);
#endif
closetImage.frame = CGRectOffset(closetImage.frame, frameOffset.width , frameOffset.height);
[v addSubview:closetImage];
[closetImage release];
[self.closetScroller addSubview:v];
[v release];
}
}
调用parentViewController中的委托方法,该方法只进行此调用:
[self dismissModalViewControllerAnimated:YES];
我还尝试从模态视图控制器本身调用dismissModalViewControllerAnimated:YES。它只需将消息转发到它的parentViewController,并以与第一种方式相同的方式关闭模式。在记忆方面两者都没有区别
因此,我要做的是使用此方法关闭视图:
[[self.closetScroller subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
[self dismissModalViewControllerAnimated:YES];
当我这样做时,我可以看到我的对象分配在工具中减少。在打开壁橱视图之前,我有大约1.85mb的对象alloc。当我打开衣柜时,它会增加到2.5左右,这取决于UIScrollView中加载了多少服装图像。然后,当我不使用上述方法关闭视图时,它将保持在2.5,并在下次打开时增加。虽然当使用上述方法从滚动条中删除装备图像时,我的对象alloc会在接近1.85mb时下降。也许再多一点,这就告诉我它还保留着一些其他的东西
还要注意的是,当查看对象分配时,我确实看到创建了ClosetViewController对象,当我关闭模式时,它的引用被释放。我可以看到它malloc和自由的看法,因为我打开和关闭它。它没有保留视图对象本身。我很困惑
我不知道该怎么办。我没有得到任何泄漏,我释放一切都很好。任何想法都很好
马克每次打开模态窗口时,我都注意到仪器中的object alloc保留着对UIScrollView的实时引用。为了解决这个问题,在分配scrollview时,我分配了一个新的UIScrollView对象,并将其分配给CloseTscroll,然后将其释放。这解决了问题每次打开模式窗口时,我都注意到仪器中的object alloc保留了对UIScrollView的实时引用。为了解决这个问题,在分配scrollview时,我分配了一个新的UIScrollView对象,并将其分配给CloseTscroll,然后将其释放。这就解决了问题。我认为您只是没有在视图控制器的dealloc中释放closetScroller。我认为您只是没有在视图控制器的dealloc中释放closetScroller。'memory'作为标记的用处不及识别平台的一半。对不起,我不知道除了iphone之外还有很多平台使用UIViewController和ModalViewController。下次我一定会把它贴上iPhone iOS4.3的标签,我希望这会有所帮助。我不允许在24小时内回答自己的问题,但我确实有答案。注意到object alloc在每次打开模式窗口时都保持对UIScrollView的引用。为了解决这个问题,在分配scrollview时,我分配了一个新的UIScrollView对象,并将其分配给CloseTscroll,然后将其释放。这解决了问题。哦,还有威尔。除非你在回答问题,否则不要发表回复。我不在乎你的代表在这里。如果内存、UIViewController和ModalViewController不适合您,请找到其他文章阅读。安静,威尔·迪恩,我明白你的意思,我道歉。在花了这么长时间试图解决这个问题并最终发布了一个问题后,我很失望地看到一个对我来说完全偏离主题的回答。但现在我明白你的意思了。从那以后,我查看了主页,发现这个网站的组织方式基本上是按平台进行的。下一次我肯定会添加这个标签。“内存”并没有标识平台的标签的一半有用。对不起,我不知道除了iphone之外还有很多平台使用UIViewController和ModalViewController。下次我一定会把它贴上iPhone iOS4.3的标签,我希望这会有所帮助。我不允许在24小时内回答自己的问题,但我确实有答案。注意到object alloc在每次打开模式窗口时都保持对UIScrollView的引用。为了解决这个问题,在分配scrollview时,我分配了一个新的UIScrollView对象,并将其分配给CloseTscroll,然后将其释放。这解决了问题。哦,还有威尔。除非你在回答问题,否则不要发表回复。我不在乎你的代表在这里。如果内存、UIViewController和ModalViewController不适合您,请找到其他文章阅读。安静,威尔·迪恩,我明白你的意思,我道歉。在花了这么长时间试图解决这个问题并最终发布了一个问题后,我很失望地看到一个对我来说完全偏离主题的回答。但现在我明白你的意思了。从那以后,我查看了主页,发现这个网站的组织方式基本上是按平台进行的。下一次我肯定会添加这个标签。我在发布文章中提到过它-对象closetScroller是用@property(nonatomic,retain)UIScrollView*closetScroller定义的;在Dealoc中发布。但我回去检查确认了一下。更改了c
[[self.closetScroller subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)];
[self dismissModalViewControllerAnimated:YES];