iOS应用在Xcode中的内存使用不断增加

4
我是iOS编程的新手,刚刚建立了一个iPhone应用程序,可以向用户提问并返回答案。编程环境为OS X 10.9和Xcode 5.0.2。每次我启动iPhone模拟器时,调试导航器会显示内存使用量为13.5MB,但即使在我返回主屏幕后,内存使用量仍然在不断增加。一分钟后,内存使用量将稳定在17.5MB左右。这是正常行为还是需要添加一些内存管理代码呢?
#import "QuizViewController.h"

@interface QuizViewController ()

@property (nonatomic) int currentQuestionIndex;
@property (nonatomic, copy) NSArray *questions;
@property (nonatomic, copy) NSArray *answers;

@property (nonatomic,weak) IBOutlet UILabel *questionLable;
@property (nonatomic,weak) IBOutlet UILabel *answerLable;

@end

@implementation QuizViewController

- (instancetype) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if(self){
        self.questions = @[@"From what is cognac made?",
                           @"What is 8 + 8 ?",
                           @"What is the capital of Minnesota?"];
        self.answers = @[@"Grapes",
                         @"16",
                         @"St.Paul"];
    }

    return self;
}

- (IBAction)showQuestion:(id)sender
{
    self.currentQuestionIndex++;
    if (self.currentQuestionIndex == [self.questions count]){
        self.currentQuestionIndex = 0;
    }
    NSString *question = self.questions[self.currentQuestionIndex];
    self.questionLable.text = question;
    self.answerLable.text = @"???";
}
- (IBAction)showAnswer:(id)sender
{
    NSString *answer = self.answers[self.currentQuestionIndex];
    self.answerLable.text = answer;
}

@end

你为什么在你的UIViewController初始化方法中使用“-(instancetype)”而不是“-(id)”? - Michael Dautermann
1
如果内存使用稳定,那么你可能没问题。如果在你的控制器之间来回切换时内存使用不断增加,那么你做错了什么。 - rdelmar
1
Michael,这个链接说使用instancetype比使用id更受欢迎。https://dev59.com/1Gox5IYBdhLWcg3wyHPc - wz366
1个回答

1

自动引用计数(ARC)可以自动管理内存。在输出日志中,如果您没有看到“did receive memory warning”(已收到内存警告)的信息,则表示一切正常。除此之外,我认为这是正常的。


+1 因为你提到了 ARC,你比我快了几秒钟。 - Alejandro
我没有收到任何警告日志。ARC是否像Java中的垃圾回收器一样工作?有没有情况需要自己释放内存?谢谢! - wz366
我对Java了解不多,所以无法确定,但是ARC(自动引用计数)使得您在创建对象后不必释放或dealloc对象。 这就是它的简短版本。 http://en.wikipedia.org/wiki/Automatic_Reference_Counting 可以为您提供更多信息。主要是,只要您没有收到“接收内存警告。”日志,那么就没有什么需要担心的。 - Charlie
1
是的,它就像垃圾回收器一样,我不同意如果您没有收到内存警告就不必担心。通常,在短时间内内存泄漏不足以接收内存警告。有一些iOS对象不受ARC管理,因此即使它们被解除引用,如果没有明确释放,它们的内存也会保留,例如核心图形对象。无论如何,作者说内存增长然后稳定下来-这是正常的和好的! - Gobe
2
iOS模拟器不会发出内存警告。而且,内存警告并不是验证内存使用情况良好的好方法。在设备之间,发送警告的已用内存量非常不同。有可能应用程序在内存较低的设备上根本无法运行(如iPhone 4(512 MB RAM)或甚至3GS(256 MB RAM)),而在像iPhone 5(1 GB RAM)这样的设备上从未触发内存警告。 - Matthias Bauch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接