2010-02-25 53 views
0

我希望我的選擇器視圖可以顯示1 - 200,但我認爲這是太多的內存,如果我在這個視圖設置一個數組:如何優化iPhone中的選取器視圖?

self.myLargeView = [[NSArray alloc] initWithObjects:@"1 unit", @"2 units", .... ..., @"199 units" @"200 units", nil]; //code skipped 

我怎樣才能減少應用程序的內存負載?有任何想法嗎?

回答

3

如果你希望你的選擇器視圖只是顯示一個遞增的數字,那麼你可能會使用這樣的:

#define kPickerValuesAmount 200 

#pragma mark - 
#pragma mark UIPickerViewDataSource methods 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return kPickerValuesAmount; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    return [NSString stringWithFormat:@"%i unit%@", (row + 1), (row == 0 ? @"" : @"s")]; 
} 
+0

即使每次調用'titleForRow'新的'NSString'對象時,它都能夠工作得足夠快。 – 2010-02-25 16:29:49

0

如果用戶只需從1到200中挑選一個數字,爲​​什麼不使用UISlider呢?

+0

我希望用戶實際上可以選擇的號碼,我看到了蘋果的日期選擇器還可以允許用戶滾動很多項目。 – Tattat 2010-02-25 16:06:44

+0

如果選擇器的行標題的形式爲「x unit(s)」,則可以在titleForRow方法中生成字符串,而不是預先分配字符串數組。 – DyingCactus 2010-02-25 16:18:24

0

200個短NSStrings數組不會導致任何內存問題。它只需要幾千字節。

+0

真的嗎?但是我的代碼需要很長時間。 – Tattat 2010-02-25 16:07:54