在UITableViewController(實現了UITableViewDataSource)下須要實現ide
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;spa
此接口就是使用數據初始化一個Cell視圖並返回,咱們能夠每次建立一個新Cell,而後返回對象
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier接口
這樣咱們能夠在建立Cell對象的時候設置它的Style。內存
而若是是Cell重用的時候,咱們只能從tableView的cell池中獲取一個Cell對象it
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;table
這樣獲得的cell,是使用默認初始化方法和參數建立的,建立的過程有tableView負責,對咱們透明。class
而cell對象又沒有設置style的明確接口,由於又不是在nib環境下,也不能經過IB來設置。queue
最終的解決方法是,獲得的cell對象再次調用初始化方法initWithStyle,即方法
cell = [cell initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"];
總結:初始化方法並不老是跟alloc配套使用,不要造成這樣的固定思惟。alloc分配了內存後,能夠調用屢次初始化方法,就像隨便改變一個對象的屬性值同樣。