2012-01-26 42 views
0

我有一个内存泄漏与下面的代码。如果我加分,以NSMutableArray的(subViewController)后使用[sub release];,分析说:,当我删除[sub release]“的对象的引用计数未在这一点上调用者所有的​​Inconrrect递减”,那么它说:“潜在的泄漏在XX行分配的对象”内存管理:添加到NSMutableArray后释放viewcontroller对象

for (int i=0; i<[self.data count]; i++) { 

    SubCategoryViewController *sub =[[SubCategoryViewController alloc] 
      initwithServiceUrl:urlString andHeaderValue: 
      ((PMCategory *)[self.data objectAtIndex:i]).categoryName]; 

    [[AppDelegate sharedAppDelegate].viewController.subViewControllers addObject:sub]; 
    [sub release]; 


} 

ALSON如果我使用自动释放警告变成“对象发送-autorelease过很多次”

SubCategoryViewController *sub =[[[SubCategoryViewController alloc] 
      initwithServiceUrl:urlString andHeaderValue: 
      ((PMCategory *)[self.data objectAtIndex:i]).categoryName]autorelease]; 

加评论来自: SubCategoryViewController Init方法:

@property (nonatomic, retain) NSMutableArray *data; 
@property (nonatomic, copy) NSString *headerText; 
@synthesize data = _data; 
@synthesize headerText=_headerText; 

...

self = [super init]; 
if (self) { 
    self.data = [[NSMutableArray alloc] init] ; 
    self.headerText =headerValue; 
    self.serviceURL =serviceU; 
    self.firstLoad = YES; 
} 
return self; 
+0

你的自定义init方法是什么样的(或者至少显示return语句) –

+0

SubCategoryViewController初始化方法:self = [super init];如果(self){self_data = [[NSMutableArray alloc] init]; self.headerText = headerValue; self.serviceURL = serviceU; self.firstLoad = YES; } return self; – aslana

+0

显示数据的@property语句。 (你可以编辑你的问题,我认为)。 – zaph

回答

2

那是因为你的避风港没有遵循目标c的适当命名约定。每当你正在写任何初始化函数namingConvention是类似于

-(id) initFirstWordSecondWord{ 
} 

意味着初始资本后首字母。

因此,将您的initwithServiceUrl更改为initWithServiceUrl并且您的问题将得到解决。 振作起来!

+0

这很有趣但很正确。谢谢@ Sunil-Pandley – aslana

0

如果dataretain属性的属性,则它是通过保留,一旦:

[[NSMutableArray alloc] init] 

和一次由属性设置者。

将其更改为使用返回自动释放NSMutableArray类的简便方法:另外

self.data = [NSMutableArray array]; 

for循环,可以更清楚地快速列举写成:

for (PMCategory *category in self.data) { 
    SubCategoryViewController *sub =[[SubCategoryViewController alloc] 
     initwithServiceUrl:urlString 
     andHeaderValue:category.categoryName]; 
+0

我试过你的建议,但没有改变。 – aslana