2012-07-30 69 views
2

我有一個表視圖與數百自定義繪製的UITableViewCells使用drawRect:方法繪製。這些單元格共享相同的顏色樣式。因此,在每個drawRect:,我做這樣的事情:創建許多UIColors的最佳實踐?

-(void)drawRect:(CGRect)rect 
{ 
    UIColor *bgColor = [UIColor colorWithWhite:0.9 alpha:1.0]; 
    UIColor *textColor = [UIColor colorWithWhite:0.98 alpha:1.0]; 
    UIColor *strokeColor = [UIColor colorWithWhite:0.6 alpha:1.0]; 
    /* use colors */ 
} 

而且使你向下滾動表,這被調用上百次。我不確定我所做的是否有效。有沒有更好的方法來創建這些顏色,也許有一些可重用性?我應該在一些全局變量中緩存這些顏色嗎?我做的是昂貴的還是微不足道的?

回答

4

首先,您應該使用樂器進行配置,以查看是否有相當多的時間用於這些呼叫。如果是這樣的話,然後讓他們的靜態變量並進行初始化在第一次使用:

-(void)drawRect:(CGRect)rect 
{ 
    static UIColor *bgColor; 
    static UIColor *textColor; 
    static UIColor *strokeColor; 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     bgColor = [UIColor colorWithWhite:0.9 alpha:1.0]; 
     textColor = [UIColor colorWithWhite:0.98 alpha:1.0]; 
     strokeColor = [UIColor colorWithWhite:0.6 alpha:1.0]; 
    }); 

    /* use colors */ 
} 
+0

即使我沒有花太多時間在這些電話中,我不應該做你以前做過的事嗎?無疑,它會更有效率,不是嗎? – Snowman 2012-07-30 19:30:18

+0

如果它讓你的程序更快,那麼你應該這樣做。如果它對你的程序的性能沒有太大的改變,那麼這只是一個品味問題。我可能會這樣做,其他人可能不會。 – 2012-07-30 19:34:50

+0

最終結果是什麼? UIColor的初始化是否需要時間? – Eric 2012-10-25 17:46:21

2

是否有更好的方法來創建這些顏色,可能與一些可重用性?

您的手機可以容納MONSharedCellStuff對象,該對象可以由創建單元的控制器創建和設置。接口可以採用以下形式:

@interface MONSharedCellStuff : NSObject 

@property (nonatomic, copy, readonly) UIColor * bgColor; 
@property (nonatomic, copy, readonly) UIColor * textColor; 
@property (nonatomic, copy, readonly) UIColor * strokeColor; 

@end 

你也可以使用這個實例分享其他更改的事(普通圖像或字體)。

或者,單元可以在初始化時創建並保存它們(儘管這會花費比正確共享更多的時間和內存)。這對於簡單的情況來說很好。

對於那麼多的單元格,有效地重用單元格很重要。

我應該在某些全局變量中緩存這些顏色嗎?

編號再一次,創建單元的控制器可能是緩存和創建它們的好地方。

我在做的是昂貴的還是微不足道的?

請參閱內存和CPU分析器。