2014-02-05 49 views
0
UITableView *tableView = (id)[self.view viewWithTag:1]; //why id is used here? 

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

这是“开始iOS 6开发”一书中的一段代码,第8章,第245页。以下代码的含义是什么?为什么在这里使用“ID”?

我想知道为什么在这里“id”是必要的?

+2

http://stackoverflow.com/questions/17385693/difference-between-casting-to-id-than-real-class-type-objective-c – viggio24

回答

4

id不应该在那里。它应该是:

UITableView *tableView = (UITableView *)[self.view viewWithTag:1]; 

圆括号中的部分称为“铸造”。这是需要的,因为viewWithTag:方法返回UIView参考,但您希望将其分配给UITableView变量。演员告诉编译器,你知道得更好,返回的视图确实是一个表视图。没有强制转换,编译器会抱怨分配无效。

使用id也适用于此,因为id是一种可以表示任何对象类型的通用类型。

0

id在这里没有必要,我不认为这是一个好主意。 viewWithTag:返回一个UIView对象,但代码需要知道有关UITableView方法。

通过转换为id(它是指向任何Objective-C对象的指针),编译器允许将任何方法发送到tableView。这可能会导致问题,但如果您尝试向UITableView发送消息不知道。

改为将其转换为UITableView对象会更好。这将是(UITableView *)[self.view viewWithTag:1];

相关问题