При реализации метода параметры / локальные переменные совместно используют то же пространство имен, что и переменные экземпляра.Однако они не используют то же пространство имен, что и объявленные свойства, что означает, что класс может объявить свойство с именем someData
(или унаследовать его от одного из его суперклассов), иметь переменную резервного копирования с некоторым другим именем, иРеализация метода этого класса также может иметь параметр / локальную переменную с именем someData
- компилятор не выдаст предупреждение в этом случае.
Я предполагаю, что у вас есть объявленное свойство с именем tableView
итакже переменная экземпляра с именем tableView
, последняя либо явно объявлена в интерфейсе, либо автоматически создана при синтезировании свойства.В этом случае, если вы определяете метод, который принимает параметр с именем tableView
или объявляет локальную переменную с именем tableView
, это локальное объявление будет скрывать переменную экземпляра с именем tableView
(но не свойство).
В случае UITableViewController
переменная экземпляра с именем tableView
отсутствует.Существует объявленное свойство с именем tableView
, которое, поскольку оно находится в другом пространстве имен, не будет скрыто локальной (переменной) декларацией.
Одним из простых способов избежать предупреждений компилятора является предоставление другогоимя переменной экземпляра.Например, переменная экземпляра может быть названа _tableView
, а свойство все равно будет именоваться tableView
, но синтезировано как @synthesize tableView = _tableView
.