2010-12-27 17 views
1

私はiOSアプリに取り組んでいると私は特定のセクションの行数を返すために私のテーブルのいずれかのために、次のコードを使用しています:これはどれでも最適化できますか?

return [[kSettings arrayForKey:@"views"] count];

書くための他の方法がありますそのコード行はより効率的なメモリになるでしょうか?

EDIT:

kSettings = NSUserDefaults standardUserDefaults

私のコード行を書き換える方法はありますか?それで、それが占有するメモリは今すぐリリースされるよりも早くリリースされますか?

+2

あなたはその性能を測定していますか? –

+0

'kSettings'とは何ですか? –

+0

@Jacob Relkin使い方に基づいて、NSUserDefaultsのインスタンスのように見えます。最適化を有効な問い合わせにすると思います。 –

答えて

2

まず、私の頭に浮かぶのは、なぜからアレイを取り出すのですか?-tableView:numberOfRowsInSection:が呼び出されますか?

店このようなあなたのUIViewControllerサブクラスで、この配列へのポインタ参照:

@interface YourViewController : UITableViewController { 
    NSArray *views; 
} 
@property (nonatomic) NSArray *views; 

- (void) reload:(BOOL) reloadTable; 

//... 
@end 

@implementation YourViewController 

@synthesize views; 

- (void) reload:(BOOL) reloadTable { 
    [self setViews:[NSUserDefaults arrayForKey:@"views"]]; 
    if(reloadTable) 
    [[self tableView] reloadData]; 
} 

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    //... 
    [self reload:NO]; 
} 


- (NSInteger) tableView:(UITableView *) table numberOfRowsInSection:(NSInteger) section { 
    return [[self views] count]; 
} 

//... 

@end 

あなたは完全にテーブルのデータをリロードする必要があるときは、ちょうど[self reload:YES]を呼び出します。

このアプローチは、NSUserDefaultsがアクセスされた回数を減らす-reload:を呼び出すと、NSUserDefaultsからデータを再フェッチするだけなので便利です。

2

もっとパフォーマンスが必要ですか? (専門家だけのために)それを

  • をしないでください

    1. まだそれをしないでください:常に最適化の最初の2つのルールを覚えています。

    具体的には、アプリケーションがゆっくり実行されている場合は、正確に減速が発生している場所を特定することが重要です。それはあなたが思っている場所にいるようには見えないので、あなたはプロファイルを作成し、確かに見つけなければなりません。インストゥルメント

    と言ってください。 :-)

  • +1

    @Timああ、あなたは私にロトフラモを作った! :) –

    +3

    私は一般的な意味で同意しますが、最適化のコストコスト(コード複雑さと時間投資の意味で)が十分に低く、最適化が実際に有効なものであれば、理由はありません**それをするために。コードが "十分に良い"ために最適化されていないコードを残す理由は、今日誰もがギガバイトとギガバイトのRAMを必要とする理由です。 :P –

    +1

    ジャスティン、あなたはポイントを欠場しています。最適化しない理由は、大量のRAMと高速プロセッサを搭載しているためではありません。なぜなら、機能を動作させることが重要なのですから、プロファイラを使用して、最適化する場所あなたが最適化する必要があると思う*。 –

    関連する問題