我可以完全优化吗?

时间:2010-12-27 00:35:31

标签: performance optimization uitableview ios

我正在开发一个iOS应用程序,并且我在其中一个表中使用以下代码来返回特定部分中的行数:

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

还有其他方法可以编写这行代码,以便提高内存效率吗?

修改

kSettings = NSUserDefaults standardUserDefaults

有没有办法重写我的代码行,以便它占用的内存比现在发布的内存更早发布?

2 个答案:

答案 0 :(得分:2)

它需要更高效吗?永远记住前两个优化规则:

  1. 不要这样做
  2. (仅限专家)不要这样做。
  3. 具体来说,如果应用程序运行缓慢,那么确定减速发生的确切位置非常重要。它似乎永远不会出现在您认为的位置,因此您必须对其进行剖析并确定。调查仪器。

    只是说。 : - )

答案 1 :(得分:2)

嗯,我想到的第一件事是“为什么每次调用NSUserDefaults时都会从-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的次数。