我正在通過David Mark等人的「更多iOS6開發」書籍工作,並對與在tableviewcell類中聲明靜態NSDateFormatter實例相關的問題感到困惑。當聲明它的對象被釋放時,NSDateFormatter的靜態聲明實例會發生什麼?
在示例程序中,有一點他們讓讀者創建一個tableviewcell類來創建用於輸入日期的單元對象。他們建議在tableviewcell類中聲明靜態NSDateFormatter實例。他們解釋的基本原理如下:「你在這裏做了什麼?你定義了一個NSDateFormatter類型的局部靜態變量__dateFormatter。你這樣做是因爲創建一個NSDateFormatter是一個昂貴的操作,並且你不想創建一個新的實例要格式化一個NSDate」
每次代碼如下:
#import "SuperDBDateCell.h"
static NSDateFormatter *__dateFormatter = nil;
@interface SuperDBDateCell()
@property (strong, nonatomic) UIDatePicker *datePicker;
- (IBAction)datePickerChanged:(id)sender;
@end
@implementation SuperDBDateCell
+ (void)initialize
{
__dateFormatter = [[NSDateFormatter alloc] init];
[__dateFormatter setDateStyle:NSDateFormatterMediumStyle];
}
什麼,我不明白是發生了什麼實例_dateFormatter當包含此tableviewcell的視野中消失。 ..也就是說,這個靜態變量當時是不是已經釋放了,然後每當包含這個tableviewcell類的一個實例的父視圖被重新創建時重新創建呢?如果沒有,爲什麼不呢?
感謝您的幫助......我一直在尋找通過SO,而蘋果開發者網站,以及和一直沒能找到任何東西,解釋它...
「UITableViewCell」在滾動出視圖時被重用,所以當靜態日期格式化程序被實例化時,它將在表視圖單元格被重用時可用。 – bobnoble
@bobnoble單元重用與'__dateFormatter'靜態變量的生命週期無關。 – rmaddy