如何使用 Xcode 跟踪哪个项目增加了 iOS 中的内存?

Posted

技术标签:

【中文标题】如何使用 Xcode 跟踪哪个项目增加了 iOS 中的内存?【英文标题】:How to track which item increases the memory in iOS using Xcode? 【发布时间】:2014-08-26 08:03:43 【问题描述】:

我有一个 ios 应用,有 5 个视图控制器

在调试模式下,它从 30mb 内存使用开始,然后当我使用应用程序并转到其他视图控制器时,它会增加 5 甚至更多。永远不要失望。

我使用 sqlite 数据库和 我使用单例类:

#import <Foundation/Foundation.h>

@interface LoggedinUser : NSObject

   NSMutableArray *questionIDs;

+ (LoggedinUser *)sharedCenter;
@property (nonatomic,retain) NSString *email;
@property(nonatomic,retain)NSString *firmID;
@property (nonatomic,retain) NSString *name;
@property(nonatomic,retain)NSString *surname;
@property (nonatomic,retain) NSString *userTypeID;
@property(nonatomic,retain)NSString *firmName;
@property(nonatomic,retain)NSString *userID;
@property(nonatomic,retain)NSString *dbFileName;
@property(nonatomic,retain)NSString *answerdbFileName;
@property(nonatomic,retain)NSString *lastOrderIndex;
@property(nonatomic,retain)NSMutableArray *questionIDs;
@property(nonatomic,retain)NSString *programID;
@property(nonatomic,retain)NSString *merchantID;

@property(nonatomic,retain)UIViewController *myQuestionView;
@end


#import "LoggedinUser.h"

@implementation LoggedinUser
@synthesize             userID,surname,name,userTypeID,email,firmID,firmName,dbFileName,answerdbFileName,lastOrderIndex,programID,questionIDs,merchantID,myQuestionView;

static LoggedinUser *sharedLoggedinUser = nil;    // static instance variable

+ (LoggedinUser *)sharedCenter 
    if (sharedLoggedinUser == nil) 
    sharedLoggedinUser = [[super allocWithZone:NULL] init];
    
return sharedLoggedinUser;


- (id)init 
if ( (self = [super init]) ) 
    questionIDs = [[NSMutableArray alloc] init];
    myQuestionView=[[UIViewController alloc] init];

return self;


+ (id)allocWithZone:(NSZone *)zone 
    return [self sharedCenter];


- (id)copyWithZone:(NSZone *)zone 
    return self;


-(void)dealloc 
    //[super dealloc];


@end

这可能是我的问题,但是当我在视图控制器中浏览时,我想跟踪哪个变量或哪个方法增加了内存。

注意:如果我在视图控制器上什么都不做,它永远不会增加。在我推送到另一个视图控制器后它会增加

它是一个 iOS 7 应用并使用 ARC

请给我一些想法,让我找到正确的方法来找到,如何跟踪变量和方法来找出问题所在

编辑:@Mutawe 这是我在统计中找不到对象列表的仪器屏幕截图?你能帮忙吗?

【问题讨论】:

【参考方案1】: 打开您的 Xcode 项目 选择可执行文件(如果需要) 按cmd+i(个人资料) 在 Le Wizard 中选择“泄漏”工具(如果需要) 按 Return 开始分析 运行您的应用程序 在仪器中按“停止” 验证选择了“分配”工具 单击并按住名为“统计”的弹出按钮 选择对象列表项 在对象列表的记录中找到您感兴趣的分配 选择该分配/对象 在该分配的表格视图单元格中单击地址右侧的“详细箭头” 现在您可以看到与分配相关的所有事件(分配、空闲、引用计数操作) 按cmd+shift+e 了解更多详情 浏览此列表中的事件,找出您要寻找的不平衡。

【讨论】:

感谢您的详细回答,我编辑了我的问题。我找不到统计按钮和对象列表。我在我的问题中放了一个截图。你能帮忙吗?

以上是关于如何使用 Xcode 跟踪哪个项目增加了 iOS 中的内存?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中跟踪负责堆增长的代码

如何找出哪个课程占用的内存最多?

Xcode 4.2/iOS 5 下控制台中没有异常堆栈跟踪?

XCODE中怎么使用IOS 5.0的模拟器?

XCode:无缝保持位置更新

Xcode 如何决定首先加载哪个 xib?我该如何改变呢?