Iphone 返回';自我';而不是设置为';[(超级或自我)初始化…]';在我的自定义alloc方法中

Iphone 返回';自我';而不是设置为';[(超级或自我)初始化…]';在我的自定义alloc方法中,iphone,ios,objective-c,self,Iphone,Ios,Objective C,Self,我使用自定义方法初始化自定义视图: 1) 在我的视图控制器中,我正在调用自定义视图,并将此数组传递给我的自定义类(UIView类型) NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil]; customViewObject = [[CustomView alloc] initWithArray:array]; [ParentLayout ad

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

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;
  }

它给了我一个可能的泄漏,名为
返回'self',而它没有设置为'[(超级或自我)初始化…]'的结果。

请确保您不需要它,只要:

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

customViewObject = [array objectAtIndex:0];

在您的代码中,您分配了一个视图并将其释放。

编译器正在抱怨,因为您使用的是
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];

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

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil];
customViewObject = [array objectAtIndex:0];
从定义init方法


在创建自定义视图的位置使用上述代码,而不是在自定义的定义正文中使用。

我不确定您的代码是否有意义。你想做什么?我想做的是,我将在父级中创建的瞬间作为自身传递,因此所有操作将自动调用自定义类的方法for ex。如果我单击在父级中动态添加的子视图的按钮,它将调用自定义视图类的相关方法,因为它具有自定义类的引用instantSounds就像您尝试在最适合实例的角色中使用类一样。假设任何类方法都可以在实例上实现以完成完全相同的任务,为什么不直接使用实例呢?您知道这个对象不会是CustomView对象,但是无论loadNibNamed方法返回什么作为其第一个对象?当然,我在回答之前读过,仍然看不出您为什么需要它。在加载nib时创建CustomView,然后分配另一个CustomView,将其丢弃并返回第一个CustomView。这就是我看到的。不,疯子。对象是相同的,我正在传递对象的视图,因为iPad和iPhone@BaZinga:不管你怎么想,MANIAK_dobrii的代码做的和你的代码完全一样,减去浪费的分配变量数组是参数变量(因此是局部变量),它不是实例变量。虽然这个方法(不是函数,这是不同的)没有意义,但是数组的使用本身并没有错;错误消息与数组无关,我误读了实例变量的代码;非常感谢。我会去修改我的答案。