在我的自定义alloc方法中没有设置为'[(super或self)init ...]'的结果时返回'self'

时间:2013-04-12 05:16:02

标签: iphone ios objective-c self

我使用自定义方法初始化自定义视图:

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...]'

的泄密

3 个答案:

答案 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];