0

カスタムメソッドでカスタムビューを初期化します:

1) My View Controller では、カスタム ビューを呼び出して、この配列を 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];

あなたのコードでは、ビューを割り当て、自己を割り当ててそれを失います。

于 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 に答える