Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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
Can';在iOS应用程序中找不到废弃的内存_Ios_Iphone_Objective C_Xcode_Memory Management - Fatal编程技术网

Can';在iOS应用程序中找不到废弃的内存

Can';在iOS应用程序中找不到废弃的内存,ios,iphone,objective-c,xcode,memory-management,Ios,Iphone,Objective C,Xcode,Memory Management,我正在为iOS开发一款游戏,在一些游戏屏幕之后,游戏将被终止。我用Xcode启动了仪器,我意识到屏幕之间的内存在不断增长。 ARC已启用 如下图所示,我使用标记生成功能来跟踪前两个屏幕之间被丢弃的内存 在启动应用程序后,第A代会立即出现在标题屏幕中。 B、 C和D是从ChoosePlayer返回后立即出现在标题屏幕上的 这些屏幕有一些通过InterfaceBuilder创建的UIImageView和UIButton 我删除了所有以编程方式创建的视图。正如您所看到的,似乎有很多被丢弃的内存,但我

我正在为iOS开发一款游戏,在一些游戏屏幕之后,游戏将被终止。我用Xcode启动了仪器,我意识到屏幕之间的内存在不断增长。 ARC已启用

如下图所示,我使用标记生成功能来跟踪前两个屏幕之间被丢弃的内存

在启动应用程序后,第A代会立即出现在标题屏幕中。 B、 C和D是从ChoosePlayer返回后立即出现在标题屏幕上的

这些屏幕有一些通过InterfaceBuilder创建的UIImageView和UIButton 我删除了所有以编程方式创建的视图。正如您所看到的,似乎有很多被丢弃的内存,但我不知道如何跟踪它们,因为堆栈来自一个InternAPI调用

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

下面是标题屏幕视图控制器的完整代码

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


如果您担心内存不会被释放,我认为如果您将注意力集中在返回
标题屏幕后的几代人上,分析就会简化。当你在
ChoosePlayer
上查看世代时,可能只会混淆情况

因此,启动应用程序并获得初始标题屏幕,执行A代。转到
选择图层
(不执行一代),然后再次返回
标题屏幕
(等待一秒钟),执行B代。对C代和D代重复该过程


完成这项工作后,请将注意力集中在第C代和第D代。不要担心A(启动时会消耗掉所有资源),甚至B(可能会包含缓存的资源)。在返回第二次、第三次和后续时间后,您确实希望将注意力集中在几代人身上。

如果启用了ARC,为什么要使用@autoreleasepool。你没有试过吗?事实上,我是不顾一切地加上去的。原始代码没有。我会先删除它,然后删除ViewDidDemouse代码。你把废弃内存称为什么?SMTitleScreenViewController经常被实例化吗?直接还是通过儿童班?我遇到了一个类似的问题,不得不删除我的iboutlet并用标签替换。原因是,在使用带有xib的iboutlets时,每个未归档副本必须创建自己的版本。我将尝试查看是否可以查找文档,但相信它是在cocoa concepts文档中。在没有自动恢复池和ViewDidEvale的情况下,仍然会发生这种情况。被抛弃的内存仍然存在于我的应用程序中,但我再也无法访问它了。谢谢你,罗布。我按照指示做了,创建了A、B、C、D代。我用图像更新了线程。结果是,内存增长和项目似乎是我为每个屏幕捕获的两代的总和。我在我的应用程序中的每个屏幕上都经历了内存增长,我试着分析标题并选择播放器,因为它们是比较简单的。我不知道发生了什么。我应该声明的一件重要的事情是,我正在模拟器的发布版本中对此进行分析。(当我尝试在设备上运行Instruments时,它会启动应用程序,但在退出后,仍然不知道为什么)@felipedrl OK。谢谢顺便说一句,您已经共享了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