我有一个名为CategoryViewController的类,它的viewDidLoad方法调用此方法:
- (void)reset {
Category * c = [[Category alloc] initWithId:0 title:@"Categories"];
[self setCategory:c];
[c release]; // <--- line of code I am interested in
self.title = @"Categories";
[self fillCategory];
}
在大多数情况下,此处的类别为null,但有时需要在分配类别后调用reset。没有我在代码中标记的行,程序构建和调试就好了,我可以拉起仪器并检查我的泄漏。我能找到的唯一泄漏是从这个函数初始化的类别(因为没有发布,我在已经初始化的CategoryViewController上调用此函数时会出现泄漏)。
如果我尝试按照c,Instruments,XCode和Simulator上的版本运行此方法,则所有操作都开始奇怪,崩溃和冻结,给我随机的SIGABRT和SIGKILL。我可以使用那里的代码行来构建和调试,但是Instruments甚至不会启动我的应用程序。谁能给我一个暗示这里发生了什么?
编辑:更多代码
@implementation Category
@synthesize title, articleCount, seeAlso, categoryId, articles, subcategories;
- (id)initWithId:(NSInteger)cid title:(NSString*)t{
self.title = t;
self.categoryId = cid;
[self setArticles:[[NSMutableArray alloc] init]];
[self setSubcategories:[[NSMutableArray alloc] init]];
[self setSeeAlso:[[NSMutableArray alloc] init]];
self.articleCount = 0;
return self;
}
答案 0 :(得分:1)
如果你花时间在网上发布这些东西似乎很容易解决,这很有趣。在发布了类别初始化代码后,我意识到我没有正确地发布我所做的分配。在适当的内存管理之后,我的泄漏以及我的崩溃似乎已经消失了:
- (id)initWithId:(NSInteger)cid title:(NSString*)t{
self.title = t;
self.categoryId = cid;
NSMutableArray * m = [[NSMutableArray alloc] init];
[self setArticles:m];
[m release];
m = [[NSMutableArray alloc] init];
[self setSubcategories:m];
[m release];
m = [[NSMutableArray alloc] init];
[self setSeeAlso:m];
[m release];
self.articleCount = 0;
return self;
}
答案 1 :(得分:0)
假设您的属性声明如下,我没有看到您突出显示的行有任何问题,也没有看到代码的其余部分:
@property (retain) Category *c;
只是在黑暗中拍摄,但上次Xcode,乐器和模拟器做了疯狂的事情,我进行了无限的递归。
您确定自己的方法fillCategory
没有以某种方式调用viewDidLoad
或reset
方法吗?
在reset
方法的第一行设置断点时会发生什么情况,并逐步按照您的代码进行操作?