2011-06-28 8 views
0

これは、私がtableviewに2つのテキストフィールドを作成し、deallocメソッドでそれらを解放する方法です。UITextfieldを入力するとメモリが大幅に増加する

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease]; 
    } 

    cell.accessoryType = UITableViewCellAccessoryNone; 

    if ([indexPath row] == 0) { 
     text = [[UITextField alloc] initWithFrame:CGRectMake(5, 5, 300, 30)]; 
     text.delegate=self; 
     text.userInteractionEnabled=NO; 
     text.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter; 
     if (qNum-1 == 53) { 
      [email protected]"Category"; 
     } 
     [cell.contentView addSubview:text]; 
    } 
    if ([indexPath row] == 1) { 
     text2 = [[UITextField alloc] initWithFrame:CGRectMake(5, 5, 300, 30)]; 
     text2.delegate=self; 
     text2.userInteractionEnabled=NO; 
     if(qNum-1==53) { 
      [email protected]"Subcategory"; 
     } 
     text2.contentVerticalAlignment=UIControlContentVerticalAlignmentCenter; 
     [cell.contentView addSubview:text2]; 
    } 

    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    return cell; 
} 

問題は、仮想キーボードが表示され、テキストフィールドに入力するとすぐにメモリが大幅に増加することです。誰かがこの問題から私を助けてくれますか?前もって感謝します。ここで

は、私がデリゲートメソッド

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
[textField resignFirstResponder]; 
return YES; 

}

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 

if([text.text isEqualToString:@"United States"]||[text.text isEqualToString:@"Australia"]){ 
    text2.userInteractionEnabled=NO; 
    [email protected]"State"; 
    myPickerView.hidden=YES; 
    myPickerView2.hidden=NO; 
    [actionSheet showInView:mainView]; 
    [actionSheet setBounds:CGRectMake(0, 0, 320, 400)]; 
} 

}の内側に書かれ

+0

あなたの問題は、テキストフィールドの代理メソッドにあると思います。そのコードを投稿し、投稿時にフォーマットしてください。そうすれば、私たちがあなたを助けるのがずっと楽になります。 –

答えて

2

あなたのコードでは、いくつかの問題があります。新しいUITextFieldsをセルに追加しています(再利用している場合でも同じセルに新しいテキストフィールドを繰り返し追加しています)。 if (cell == nil)部分内の異なるタイプのセルに個別のセットアップロジックを作成し、後でこれらのセルのみを構成する必要があります。また、テキストフィールドをサブビューとして追加した後に解放することもできます。 UITableViewのAppleのマニュアルの例を参照してください。

デリゲートメソッドを表示することができます。多少の問題があります。

+0

+1デリゲートメソッドには明確なリークの可能性がありますが、このメソッドでは十分なリークがあります。 –

+0

私はブロック内にコードを記述しようとしましたが、あなたはテキストフィールドを挙げてリリースしました。しかし、私は入力を開始するときにまだメモリが撮影されています。私を助けてください! – booleanBoy

+0

デリゲートメソッドが正常に表示されます。セルを再作成するときは、セルのタイプに応じてセルの識別子を設定する必要があります。しかし、より深い分析のためには、もっと多くの情報が必要です。 – Eiko

0

あなたがリリースされていないテキストフィールド

+0

私はテキストフィールドをリリースしようとしました。しかし、まだメモリの状態は同じです – booleanBoy

1

この

01を試してきたコードです

[cell.contentView addSubview:text2]; 
[text2 release]; 
+0

チップのおかげで。しかし、まだ使用していない! – booleanBoy

0

メモリ割り当てを検出するためにInstrumentsを使用していますか?私は同じ正確な問題に気づいた。メモリ使用量は、キーボードが表示されたときに起動します...私はそれがあなたが心配する必要はありません何かだと思います。これを修正したことは何もありません。キーボードが現れたときには、すべての場合にかなりのことが起こります。おそらくインストゥルメントのバグでしょうか?

関連する問題