首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在iOS应用程序中找不到废弃的内存

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

Stack Overflow用户
提问于 2014-01-14 03:00:17
回答 1查看 256关注 0票数 0

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

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

A代是在启动应用程序后立即在TitleScreen中拍摄的。B、C和D是刚从ChoosePlayer回来的TitleScreen。

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

我也没有任何对其他视图控制器的引用。(没有强循环引用)。

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

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

代码语言:javascript
运行
复制
@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
EN

回答 1

Stack Overflow用户

发布于 2014-01-14 03:44:33

如果你担心内存没有被释放,我认为如果你专注于返回TitleScreen后的几代人,那么分析将会简化。当你在ChoosePlayer的时候,看看几代人可能只会让情况变得混乱。

因此,启动应用程序并获得初始标题屏幕,执行第A代。转到ChoosePlayer (不执行第1代),然后再次返回TitleScreen (等一下),然后执行第B代。对第C代和第D代重复此过程。

做完这些之后,把你的注意力集中在C代和D代上。不要担心A代(它在启动期间消耗了所有的东西),甚至B代(它可能包括可能被缓存的东西)。你真的想把注意力集中在返回第二次、第三次和后续时间之后的几代人身上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21099200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档