我有一些自定义创建的 UIViews,它们使用 .xib 文件进行布局,并使用支持类进行额外设置。我使用 alloc/init 创建这些类,并在我的自定义 init 方法中调用 loadNibNamed,但这样做会导致内存泄漏。有人指出 alloc 部分实际上创建了一个泄漏的 self 对象,所以我将我的 init 方法调整为这个:
- (id)init
{
[self autorelease];
self = [[[[NSBundle mainBundle] loadNibNamed:@"AssignmentView" owner:nil options:nil] lastObject] retain];
[self setupBranding];
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
[self addGestureRecognizer:tapRecognizer];
[tapRecognizer release];
return self;
}
但是,现在当我运行分析代码时,我收到此警告“返回'self',而它未设置为'[(super or self)init ...]'的结果”。所以我的问题是使用支持类进行自定义 UIViews 的正确方法是什么?
既然有人问我,我就使用了上面的代码,如下所示:
AssignmentView * assignmentView = [[AssignmentView alloc] init];
[self.view addSubview:assignmentView];