0

アンケートアプリを作ろうとしています。1 つのスクロール ビューには 20 個のビューがあり、多くの uitextviews があります。私がそれをしようとすると、アプリの動作が非常に遅くなります。メモリ管理がうまくできていないと思います。それを正しく行うのを手伝ってもらえますか?どうもありがとうございました。これが私のコードです:

 -(void)textViewBicimle: (UITextView *)textAlani{
[textAlani.layer setBorderColor:[[[UIColor blackColor] colorWithAlphaComponent:1.0] CGColor]];
[textAlani.layer setBorderWidth:1.0];
  }

  - (void) tableCiz:(NSMutableArray *)hucreler sutun:(int)sutunSayisi satir:     (int)satirSayisi{
 int z = 0;
 for (int i =0;i<satirSayisi;i++){
     for(int j=0;j<sutunSayisi&&z<satirSayisi*sutunSayisi;j++,z++){
         [self textViewBicimle:[hucreler objectAtIndex:z]];
         [[hucreler objectAtIndex:z] setFrame:CGRectMake((20+j*100), (20+i*40), 100, 40)];
     }
 }
 }

 -(void)hucreArrayOlustur: (int)sutunSayisi suankiView:(UIView *)soruViewIki satir:(int)satirSayisi{
for (int i = 0; i <sutunSayisi*satirSayisi; i++){
    self.textView = [[UITextView alloc]init];
    self.textView.text = @"dsgfdh";
    [self.hucreArray addObject:self.textView];
    [soruViewIki addSubview:self.textView];
    [self.textView release];
}
}

-(void)viewOlustur{
 for (int i = 0; i <soruAdedi; i++){
self.hucreArray = [[[NSMutableArray alloc]init]autorelease];
if (i == 0){
    self.soruView = [[UIView alloc]initWithFrame:CGRectMake(20, 20, 728, 0)];
    self.soruView.clipsToBounds = YES;
    self.soruView.backgroundColor = [UIColor lightGrayColor];
    [self hucreArrayOlustur:5 suankiView:self.soruView satir:10];
    [self tableCiz:self.hucreArray sutun:5 satir:10];
    CGRect frame = self.soruView.frame;
    CGRect frame2 = [[self.hucreArray objectAtIndex:49] frame];
    frame.size.height =  frame2.origin.y+frame2.size.height+34;
    self.soruView.frame = frame;
    [self.viewArray addObject:self.soruView];
    [scrollView addSubview:self.soruView];
    [self.soruView release];
}
else{
    CGRect frameGecici = [[self.viewArray objectAtIndex:i-1] frame];
    float geciciY = frameGecici.origin.y+frameGecici.size.height+1;
    self.soruView = [[UIView alloc]initWithFrame:CGRectMake(20, geciciY, 728, 0)];
    self.soruView.clipsToBounds = YES;
    self.soruView.backgroundColor = [UIColor lightGrayColor];
    [self hucreArrayOlustur:5 suankiView:self.soruView satir:10];
    [self tableCiz:self.hucreArray sutun:5 satir:10];
    CGRect frame = self.soruView.frame;
    CGRect frame2 = [[self.hucreArray objectAtIndex:49] frame];
    frame.size.height =  frame2.origin.y+frame2.size.height+34;
    self.soruView.frame = frame;
    [self.viewArray addObject:self.soruView];
    [scrollView addSubview:self.soruView];
    [self.soruView release];
}

}
}

- (void)viewDidLoad
{
[super viewDidLoad];
scrollView.contentSize = CGSizeMake(0, 10000);
self.viewArray = [[NSMutableArray alloc]init];
[self viewOlustur];
NSLog(@"%@",self.viewArray);
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];

 // Dispose of any resources that can be recreated.
}

 - (void)dealloc {
 [self.soruView release];
 [self.textView release];
 [scrollView release];
 [super dealloc];
 }

 - (void)viewDidUnload {
 [self setScrollView:nil];
 [super viewDidUnload];
  }
  @end
4

2 に答える 2

0

メモリ管理について話しているので、メモリ管理のベスト プラクティスのために、ここでいくつかの点を修正したいと思います。

使ってはいけない、

self.textView = [[UITextView alloc]init];

代わりに、

self.textView = [[[UITextView alloc] init] autorelease];

[self.textView release];また、プロパティで直接使用しないでください。ARC を使用していない場合は、次の行を dealloc メソッドに追加できます。

self.textView = nil;

また、変数をローカル変数として配置できる場合は、それをプロパティとして使用する必要はありません。

それ以外の、

self.soruView = [[UIView alloc]initWithFrame:CGRectMake(20, 20, 728, 0)];

おそらくあなたはそれを次のように使用することができます、

UIView *soruView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 728, 0)];
//rest of the code here
[self.scrollView addSubview:soruView];
[soruview release];

また、すべてのビューを同時に表示する必要がない場合は、ユーザーがそのポイントまでスクロールしたときに残りのビューを追加できます。これは、メモリ使用量の最適化にも役立ちます。

于 2012-10-23T23:16:22.180 に答える
0

UIScrollView リファレンス ページの次のアドバイスが役立つ場合があります。

スクロール ビューに表示されるコンテンツの描画を管理するオブジェクトは、ビューが画面のサイズを超えないように、コンテンツのサブビューを並べて表示する必要があります。ユーザーがスクロール ビューをスクロールすると、このオブジェクトは必要に応じてサブビューを追加および削除する必要があります。

したがって、スクロール ビュー内に 1 つの大きな調査ビューがあり、調査ビュー内にそれぞれ複数のビューを持つ多くの質問ビューがある場合、たとえば、調査ビューを削除して、スクロール ビューのコンテンツ ビューに表示されている質問だけをレイアウトできます。 .

于 2012-10-23T19:52:30.243 に答える