10

私はいつもUITableViewController宣言のための定型文を見る

static NSString *CellIdentifier

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

なぜ静的なのですか?CellIdentifierセクションに基づいて変更したため、これを多くの場所で変更しましたか?これが静的である理由は何ですか?パフォーマンスに影響はありますか?

4

3 に答える 3

21

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

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

于 2013-03-12T20:11:22.580 に答える
3

変数が宣言さstaticれると、プログラムにはその変数のインスタンスが1つだけ存在します。これは1回だけ割り当てられる定数値であるため、このアプローチでは、スタック変数を予約して割り当てる必要がありません。もちろん、そのスタック変数はコンパイラによってほぼ確実に最適化されており、文字列定数はコンパイラによって静的ストレージにすでに最適化されています。したがって、これは非常にマイナーな最適化であり、開発者が何を意味するか(つまり、すべてのインスタンスが同じ値を共有するか)についてのヒントになります。

于 2013-03-12T20:14:53.547 に答える
1

静的文字列のパフォーマンスの側面に関して@Answerbotに同意しますが、静的文字列はエラーが発生しにくいことにも注意してください。IDEは静的NSStringオブジェクトをオートコンプリートするため、文字列に一貫した名前が付けられることが保証されます。

編集:

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

static NSString *cellIndentifier = @"myCellIdentifier";

その後、使用されている実際の文字列のスペルを気にすることなく、変数'cellIdentifier'を自由に使用できます。

于 2013-03-12T20:14:48.970 に答える