Objective c iOS:简单MVC模型中的内存泄漏

Objective c iOS:简单MVC模型中的内存泄漏,objective-c,ios,memory-management,memory-leaks,Objective C,Ios,Memory Management,Memory Leaks,我已经建立(必须是简单的…)MVC模型,但我仍然有内存泄漏时按下后退按钮 模型类:.h @interface Nominal : NSObject { int nominalID; NSString *nominal; NSString *nominalImg; NSString *nominalName; } @property(nonatomic)int nominalID; @property(nonatomic,retain)NSString *nominal;

我已经建立(必须是简单的…)MVC模型,但我仍然有内存泄漏时按下后退按钮

模型类:.h

@interface Nominal : NSObject {

   int nominalID;
   NSString *nominal;
   NSString *nominalImg;
   NSString *nominalName;
}
@property(nonatomic)int nominalID;
@property(nonatomic,retain)NSString *nominal;
@property(nonatomic,retain)NSString *nominalImg;
@property(nonatomic,retain)NSString *nominalName;
@end
m

我也会释放弦

在我的视图类中,我填充它,以便:

h

m

看起来我确实释放了整捆神圣的东西,但是当我从这个视图到上一个视图按下pack按钮时,内存泄漏弹出:

我做错了什么


非常感谢您的帮助。

您在
[Nominal-dealoc]
中忘记了一个
[super dealoc]
。另外,不要调用
[self.navigationController release]
,因为该属性已经由超类(
UIViewController
)处理。

我认为这不是问题的原因,但是如果您将属性定义为
retain
,以便为您完成释放,这是很常见的,即
self.property=nil而不是发送发布消息。对于模型类中的NSStrings?通常是对于所有保留属性(或者如果您希望发布/清除iVar,则不发送任何保留属性)。将它们设置为null将自动调用release。只需确保在任何地方都使用属性(self.name),而不仅仅是将iVar(name)设置为null,否则将导致泄漏。在@synthesis中重命名IVAR是一个保持它们笔直的好主意。@JoachimIsaksson是对的,将[self.nominal release]替换为self.nominal=nil;self.nominalsArr=nil太。。。和导航控制器。。现在,这是一个奇怪的漏洞,你能发布returnNominals方法吗?不要使用[self.x release]:Thx!现在我一点也不泄密了!
@implementation Nominal
@synthesize nominal,nominalID,nominalImg,nominalName;
-(void)dealloc
 {
   [self.nominal release];
   [self.nominalImg release];
   [self.nominalName release];
 }
@end
@interface Nominals : UIViewController {
     ...
     NSMutableArray *nominalsArr;
     ...
}
@property(retain,nonatomic)NSMutableArray *nominalsArr;
 - (void)viewWillAppear:(BOOL)animated 
{
 [[self navigationController]setToolbarHidden:YES animated:YES];
   DBAccess *dbAccsess=[[DBAccess alloc]init];
   self.nominalsArr=[dbAccsess returnNominals:subCountryID];
   [dbAccsess closeDataBase];
   [dbAccsess release];
   [super viewWillAppear:animated];
}
- (void)dealloc
{
  [nominalsArr release];
  [self.navigationController release];
  [super dealloc];
}