Memory 解聘后的记忆ModalviewController激活:是

Memory 解聘后的记忆ModalviewController激活:是,memory,uiviewcontroller,modalviewcontroller,Memory,Uiviewcontroller,Modalviewcontroller,我正在介绍一个模态视图控制器,它包含一个带有一组图像的UIScrollView。当我关闭我的模态视图控制器时,我可以在我的分配(仪器)中看到分配给图像的内存挂起,但不会导致泄漏 给我带来一些困惑和任何帮助都会很好。这是我所拥有的 UIViewController-DollViewController:这是我的主视图控制器,我正在演示我的模态。这是密码- -(IBAction)openDollCloset { NSLog(@"Open Closet"); [self play

我正在介绍一个模态视图控制器,它包含一个带有一组图像的UIScrollView。当我关闭我的模态视图控制器时,我可以在我的分配(仪器)中看到分配给图像的内存挂起,但不会导致泄漏

给我带来一些困惑和任何帮助都会很好。这是我所拥有的

UIViewController-DollViewController:这是我的主视图控制器,我正在演示我的模态。这是密码-

-(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];