使用loadNibNamed会导致内存泄漏

时间:2010-08-04 00:56:34

标签: iphone objective-c interface-builder

出于某种原因,使用loadNibNamed:会让我忘记内存。

假设我有接口:

@interface Step : UIViewController
{
  IBOutlet UIView *keyPadPopupView;
}
@property (nonatomic, assign) IBOutlet UIView *keyPadPopupView;

步骤:

@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];
}

我使用:

执行init
Step *step = [[Step alloc] initWithNibName:@"StepXib" bundle:nil];
[step release]; 

我似乎无法弄清楚为什么永远不会调用dealloc方法。 在Xib内部,文件的所有者是Step,而keyPadPopupView在IB中连接。

我有什么遗失的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

在iOS中连接IBOutlet会导致保留对象(与OS X不同)。将视图添加到子视图会导致保留该视图。所以......

从笔尖加载 - +1(1)

添加为子视图 - +1(2)

发布 - -1(1)

你仍然有很好的保留。

是否正在调用viewDidUnload?通常在那里你释放所有保留的子视图。