出于某种原因,使用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];
}
我使用:
执行initStep *step = [[Step alloc] initWithNibName:@"StepXib" bundle:nil];
[step release];
我似乎无法弄清楚为什么永远不会调用dealloc方法。 在Xib内部,文件的所有者是Step,而keyPadPopupView在IB中连接。
我有什么遗失的吗?
谢谢!
答案 0 :(得分:2)
在iOS中连接IBOutlet会导致保留对象(与OS X不同)。将视图添加到子视图会导致保留该视图。所以......
从笔尖加载 - +1(1)
添加为子视图 - +1(2)
发布 - -1(1)
你仍然有很好的保留。
是否正在调用viewDidUnload?通常在那里你释放所有保留的子视图。