UITableView *tableView = (id)[self.view viewWithTag:1]; //why id is used here?
[tableView registerClass:[BIDNameAndColorCell class] forCellReuseIdentifier:CellTableIdentifier];
这是本书#34;开始iOS 6开发"第8章,第245页的一段代码。
我想知道为什么在这里" id"有必要吗?
答案 0 :(得分:4)
id
不应该在那里。它应该是:
UITableView *tableView = (UITableView *)[self.view viewWithTag:1];
括号中的部分称为“强制转换”。这是必需的,因为viewWithTag:
方法返回UIView
引用,但您希望将其分配给UITableView
变量。演员告诉编译器你知道的更好,返回的视图确实是一个表视图。如果没有强制转换,编译器会抱怨无效的赋值。
使用id
也适用于此,因为id
是一种可以表示任何对象类型的通用类型。
答案 1 :(得分:0)
id
在这里没有必要,我认为这不是一个好主意。 viewWithTag:
返回一个UIView对象,但代码需要知道UITableView方法。
通过转换为id(它是指向任何Objective-C对象的指针),编译器允许将任何方法发送到tableView。但是,这可能会导致问题,如果您尝试向其发送UITableView不知道的消息。
最好将它转换为UITableView对象。这将是(UITableView *)[self.view viewWithTag:1];