由于某种原因,使用loadNibNamed:会导致内存泄漏。使用loadNibNamed会留下内存泄漏
比方说,我有接口:
@interface Step : UIViewController
{
IBOutlet UIView *keyPadPopupView;
}
@property (nonatomic, assign) IBOutlet UIView *keyPadPopupView;
步骤:
Step *step = [[Step alloc] initWithNibName:@"StepXib" bundle:nil];
[step release];
我似乎无法找出原因:
@synthesize keyPadPopupView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]))
{
[[NSBundle mainBundle] loadNibNamed:@"customNumberKeypad" owner:self options:nil];
[self.view addSubview:keyPadPopupView];
[keyPadPopupView release];
}
return self;
}
- (void) dealloc
{
NSLog(@"dealloc........%@", [self class]);
[super dealloc];
}
我使用进行初始化dealloc方法永远不会被调用。 在Xib中,文件的所有者是Step,并且keyPadPopupView在IB中连接。
有什么我失踪了吗?
谢谢!
因此,注释掉initWithNibName的内部块会导致dealloc按预期的方式被调用? – 2010-08-04 02:20:06
我有点困惑,为什么你马上释放keyPadPopupView,而不是dealloc,因为是对象变量的习惯...... – 2010-08-04 02:21:33
正确的,注释掉内部块会导致dealloc按预期调用。 我发布了keyPadPopupView,因为不管调用dealloc。 – mmilo 2010-08-04 02:30:34