以下代码的含义是什么?为什么这里使用“id”?

时间:2014-02-05 17:24:51

标签: ios objective-c

UITableView *tableView = (id)[self.view viewWithTag:1]; //why id is used here?

[tableView registerClass:[BIDNameAndColorCell class] forCellReuseIdentifier:CellTableIdentifier];

这是本书#34;开始iOS 6开发"第8章,第245页的一段代码。

我想知道为什么在这里" id"有必要吗?

2 个答案:

答案 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];