在這個例子中使用自省是否正確的做法?在這個例子中使用自省是否正確的做法?
我在UITableView
數據源方法tableView:cellForRowAtIndexPath:
,我正在檢查數據源對象的類型,以便決定使用哪個子類的哪個UITableViewCell
。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
....
id object = [[self getDataSource:tableView] objectAtIndex:[indexPath section]];
if ([object isKindOfClass:[NSString class]] ||
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
} else if ([object isMemberOfClass:[NSNumber class]]) {
cell = [[[CMAutocompleteTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier andAutocompleteTextField:object] autorelease];
} else if ([object isMemberOfClass:[NSDate class]]) {
cell = [[[CMDateTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier andTextView:object] autorelease];
} else {
cell = [[[CMAutocompleteTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier andAutocompleteTextField:field] autorelease];
}
return cell;
}
通過在所有單元上使用相同的重用標識符,您將破壞細胞回收,或者當您使用deque時只獲取錯誤類型的單元。每種單元類型都需要一個唯一的標識 –
懷舊--' autorelease' :) –