我使用自定义方法初始化自定义视图:
1)在我的视图控制器中,我调用自定义视图并将此数组传递给我的类型为UIView的自定义类
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];
customViewObject = [[CustomView alloc] initWithArray:array];
[ParentLayout addSubview:customViewObject];
2)自定义视图。
-(id)initWithArray:(NSArray*)array {
self = [array objectAtIndex:0]; // passing view as self; here it shows leak.
if(self) {}
return self;
}
它给我一个名为Returning 'self' while it is not set to the result of '[(super or self) init...]'
答案 0 :(得分:2)
确定你不需要这个,至于:
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];
customViewObject = [array objectAtIndex:0];
在你的代码中,你分配一个视图并将其分配给自己。
答案 1 :(得分:0)
我遇到同样的问题,我通过删除这些代码修复它
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];
customViewObject = [array objectAtIndex:0];
来自定义init方法。
在您创建自定义视图的位置使用上面的代码,而不是在自定义的定义主体中使用。
答案 2 :(得分:-1)
编译器抱怨,因为您使用init
函数而不使用其中一个超级函数。虽然它可能具有逻辑意义,但从技术角度来说它是init
函数的误用,这就是编译器抱怨的原因。这并不总是一个问题(我有一些代码在我修复之前只给了我一个警告),但是不这样做是一个好习惯。在这种情况下,这不是正确使用init函数。我会写另一个这样的函数:
+(customViewObject *)createWithArray:(NSArray *)array{
customViewObject *returnObject = [array objectAtIndex:0];
return returnObject;
}
但是,看一下代码的第一部分,我认为不需要在customViewObject类中使用这种类型的函数。我建议只是这样做:
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];
customViewObject = [array objectAtIndex:0];
[ParentLayout addSubview:customViewObject];