iOS应用程序在Xcode中的内存使用率持续上升

iOS应用程序在Xcode中的内存使用率持续上升,ios,iphone,objective-c,xcode,memory-management,Ios,Iphone,Objective C,Xcode,Memory Management,我是iOS编程新手,我刚刚开发了一款iPhone应用程序,可以向用户提问并返回答案。构建环境是OSX10.9和Xcode 5.0.2。每次我启动iPhone模拟器时,Debug Navigator都会显示内存使用量为13.5mb,但即使在我返回主屏幕后,内存使用量仍会不断增加。一分钟后,内存使用将稳定在17.5mb左右。这是正常行为还是我需要添加一些内存管理代码 #import "QuizViewController.h" @interface QuizViewController () @

我是iOS编程新手,我刚刚开发了一款iPhone应用程序,可以向用户提问并返回答案。构建环境是OSX10.9和Xcode 5.0.2。每次我启动iPhone模拟器时,Debug Navigator都会显示内存使用量为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

使用ARC自动进行内存管理。您是否在日志输出中收到内存警告?如果没有,那么你很好。除此之外,我认为这是正常的。

+1提到ARC,你比我快了几秒钟。我没有收到任何警告日志。ARC是否与java中的垃圾收集器一样工作?是否有需要我自己释放()内存的情况?谢谢我对java了解不多,所以我不能确切地说,但ARC(自动引用计数)使您不必在创建对象后释放或解除锁定对象。这是它的简短版本。这会给你更多的信息。主要是只要你没有收到“收到的内存警告”日志,那么你就没有什么需要担心的了,就像垃圾收集器一样,我不同意如果你没有收到内存警告,你不应该担心。通常,内存泄漏的大小不足以在短时间内收到内存警告。有些iOS对象不受ARC管理,因此即使它们被解除,如果没有明确释放,它们的内存也会保持不变,例如核心图形对象。不管怎么说,作者说记忆会逐渐长大,然后稳定下来——这很正常也很好!iOS模拟器不会发出内存警告。内存警告并不是验证内存使用是否正常的好方法。不同设备之间发送警告后使用的内存量差异很大。有可能应用程序根本无法在内存较低的设备(iPhone 4(512 MB RAM),甚至3GS(256 MB RAM))上运行,而在iPhone 5(1 GB RAM)等设备上却从未触发内存警告。你为什么要使用“
-(instancetype)
”而不是“
-(id)
”对于您的UIViewController init方法?如果内存使用稳定,那么您可能还可以。如果当你在控制器之间来回移动时它持续上升,那么你就做错了。Michael,这个链接说使用instancetype比使用id更可取。