0

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

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

4

3 回答 3

2

当然,您不需要这个,只要:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];

customViewObject = [array objectAtIndex:0];

在您的代码中,您分配一个视图并将其分配给 self.

于 2013-04-12T05:22:44.037 回答
0

我有同样的问题,我通过删除这些代码来解决它

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];
customViewObject = [array objectAtIndex:0];

从定义init方法。

在您创建自定义视图的地方而不是在自定义的定义主体中使用上面的代码。

于 2015-04-07T08:16:18.673 回答
-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];
于 2013-04-12T05:50:40.270 回答