2013-03-12 9 views
10

私はいつも、なぜ静的UITableViewControllerのボイラープレートがCellIdentifierに静的NSStringを使用する利点は何ですか?

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 

static NSString *CellIdentifier 

を宣言参照してください? CellIdentifierがセクションに基づいて変更されているので、私は多くの場所でこれを変更しましたか?これの背後にある推論は静的なのでしょうか?パフォーマンスに影響しますか?

答えて

21

cellForRowAtIndexPath:となります。たくさんとなります。短い時間で何度も何度も呼び出されるメソッドがある場合は、自動的に解放されるのを待っているオブジェクトの数を最小限に抑えたい場合は、これらのオブジェクトはスタックに保持されるため、最小限必要です次のループを実行します。静的文字列を使用すると、メソッドが呼び出されるたびにではなく、文字列オブジェクトが1回だけ作成されます。

厳密には必要ではありませんが、モバイルデバイスのように限られた量のメモリを使用する場合は、できるだけ短時間で作成されるオブジェクトの数を最適化する必要があります。

+0

私は、各識別子に静的NSStringを使用する方が良いですか? –

+0

はい。正直なところ、あなたのテーブルに少数の行がある場合、違いはそれほどありません。特に、ARCが出て以来、ガーベジコレクションではiOSの方がはるかに優れています。しかしそれでも、それは努力を必要としない最適化なので、それを使うこともできます。 – memmons

+0

これは大きな問題ではなく、進歩を知ることができて好奇心であった。ありがとう。 –

0

私は静的な文字列のパフォーマンス面に関して@Answerbotに同意しますが、静的な文字列のエラーが起こりにくいことにも注意してください。 IDEは静的なNSStringオブジェクトを自動完成させるので、文字列の名前が一貫していることが保証されます。

EDIT:

次のコードを使用する場合:

static NSString *cellIndentifier = @"myCellIdentifier"; 

をあなたが自由に使用されている実際の文字列の綴りを気にせずに変数「cellIdentifier」を使用することができます。

+3

これはどういう意味ですか? Xcodeは任意の変数名をオートコンプリートします。 –

+1

xcodeは、静的、ローカル、マクロのいずれであっても、すべてを自動的に完了します。 –

+0

ええ、私は静的なNSString * cellIdentifier = @ "cellIdentifier"と述べました。あなたが@ "cellIdentifier"と言うことを意味していたときに、 "CellIdentifier"や@ "cellidentifier"をねじ込んで書くのではなく、cellIdentifier変数にXCodeのオートコンプリート関数を使うことができます。 – JiuJitsuCoder

3

変数がstaticと宣言されている場合、その変数のインスタンスはプログラム内に1つしかありません。これは1回のみ割り当てられる定数値なので、この方法ではスタック変数の予約と割り当てを避けることができます。もちろん、スタック変数はコンパイラによってほぼ確実に最適化されており、文字列定数はすでにコンパイラによって静的記憶域に最適化されています。したがって、開発者が何を意味するか(つまり、すべてのインスタンスが同じ値を共有していること)についてのヒントである、かなりマイナーな最適化です。

関連する問題