在iOS应用程序中找不到遗弃的内存

我正在开发一款适用于iOS的游戏,并且在一些游戏屏幕后游戏正在终止。 我在Xcode中启动了一个工具,我意识到内存在我的屏幕之间不断增长。 ARC已启用。

我使用了标记生成function来尝试跟踪前两个屏幕之间的废弃内存,如下图所示。

GeneScreen在发射应用程序之后立即采用Generations A。 B,C和D从ChoosePlayer返回后从TitleScreen中。

仪器

这些屏幕有几个UIImageViews和通过InterfaceBuilder创build的UIButton,我删除了所有以编程方式创build的视图。 正如你所看到的似乎有很多被遗弃的内存,但我不知道如何跟踪他们,因为堆栈来自实习API调用。

我也没有任何其他视图控制器的参考。 (没有强大的循环参考)。

以下是TitleScreen视图控制器的完整代码。

我相信这肯定是一个愚蠢的错误,但我找不到。 有任何想法吗? 谢谢。

@interface SMTitleScreenViewController () @property (weak, nonatomic) IBOutlet UIButton *buttonPlay; @property (weak, nonatomic) IBOutlet UIButton *buttonCamera; @property (weak, nonatomic) IBOutlet UIImageView *titleBG1; @property (weak, nonatomic) IBOutlet UIImageView *titleBG; - (IBAction)onButtonPlay:(id)sender; - (IBAction)onButtonCamera:(id)sender; @end @implementation SMTitleScreenViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { } return self; } - (void)viewDidLoad { [super viewDidLoad]; UIColor* color = [UIColor colorWithRed:0.2509f green:0.1176f blue:0.0745f alpha:1.0f]; UIFont* font = [UIFont fontWithName:@"Jungle Roar" size:BUTTON_FONT_SIZE]; NSString* playString = NSLocalizedString(@"Play", @""); NSString* cameraString = NSLocalizedString(@"Camera", @""); [self.buttonPlay setTitle:playString forState:UIControlStateNormal]; [self.buttonPlay setTitle:playString forState:UIControlStateHighlighted]; [self.buttonPlay setTitleColor:color forState:UIControlStateNormal]; [self.buttonPlay setTitleColor:color forState:UIControlStateHighlighted]; self.buttonPlay.titleLabel.font = font; [self.buttonCamera setTitle:cameraString forState:UIControlStateNormal]; [self.buttonCamera setTitle:cameraString forState:UIControlStateHighlighted]; [self.buttonCamera setTitleColor:color forState:UIControlStateNormal]; [self.buttonCamera setTitleColor:color forState:UIControlStateHighlighted]; self.buttonCamera.titleLabel.font = font; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)onButtonPlay:(id)sender { [self performSegueWithIdentifier:@"titleToChooseAnt" sender:self]; } - (IBAction)onButtonCamera:(id)sender { } @end 

如果你担心内存没有被释放,我认为如果你回到TitleScreen之后关注世代,分析将会被简化。 在ChoosePlayer上查看ChoosePlayer人可能只是混淆了这种情况。

因此,启动应用程序并获得初始标题屏幕,进行A代。转到ChoosePlayer (不要生成代码),然后再次返回到TitleScreen (等待一秒),并进行生成B.重复该生成过程C和D.

完成这些之后,请将注意力集中在C代和D代。不要担心A(启动过程中消耗的所有东西),甚至B(可能包含可能被caching的东西)。 在你回到第二次,第三次和以后,你真的想把注意力集中在几代人身上。