2014-02-05 7 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];

Смежные вопросы