First add this function:
#define row_to_array_index(row) row%[YourArrayOfRowValues count]
assuming you an NSArray called YourArrayOfRowValues that holds the text for each row.
Then in your - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
method, return a big number (like 10000), and in your - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
method, return (assuming only 1 component) [[self YourArrayOfRowValues objectAtIndex:row_to_array_index(row)];
There will be no performance or memory hit. No user will ever try to go down 10 000 rows, trust me. And when the window is reloaded, select the same data closest to the middle.