通常我从 xib 加载自定义视图的代码如下所示:
@implemenation MyCustomView
- (id)init
{
[self release];
if ((self = [[NSBundle loadViewFromXibName:@"MyCustomView" withClass:[MyCustomView class] owner:nil] retain]))
{
//some init here
}
return self;
}
where [NSBundle loadViewFromXibName:withClass:owner:]
- 返回 atoreleased 视图,从 xib 加载。
并且一切正常。但是当我尝试在 ARC 等效代码下编写时:
@implemenation MyCustomView
- (id)init
{
if ((self = [NSBundle loadViewFromXibName:@"MyCustomView" withClass:[MyCustomView class] owner:nil]))
{
//some init here
}
return self;
}
我的应用程序因 EX_BAD_ACCESS 崩溃(释放消息发送到已释放的实例)在这种情况下会发生什么?我该如何解决这个问题?
已更新此问题仅在 iOS6 SDK(iOS6 模拟器)上。在 iOS5 SDK 和 iOS 5 设备/模拟器上一切都很好。
更新这个问题只出现在表格视图单元格中,它在表格视图生命周期中被释放。我实现了静态单元生成器(从 xib 加载的返回单元)并将内部单元初始化移动到 awakeFromNib。现在一切正常。
我不明白为什么会出现这个问题——“self”是__strong,如果我给它分配任何对象,它就不能自动释放。我弄错了吗?