tableView的本地声明隐藏了实例变量?

Rob*_*Rob 4 objective-c

我理解为什么当我在自己的类中定义自己的tableView属性然后使用本地变量名tableView时,我会在标题中收到警告.

我想知道的是为什么当我从UITableViewController派生我的类时,我不会得到这个警告,它有自己的tableView属性?编译器/编辑器只查看我的类而不是父类吗?

小智 23

在实现方法时,参数/局部变量与实例变量共享相同的名称空间.但是,它们不会与声明的属性共享相同的名称空间,这意味着类可以声明一个名为someData(或从其中一个超类继承它)的属性,具有其他名称的支持实例变量,以及一个实现该类的方法也可以有一个名为的参数/局部变量someData- 在这种情况下编译器不会发出警告.

我假设你有一个名为的声明属性tableView,还有一个名为的实例变量tableView,后者要么在接口中显式声明,要么在合成属性时自动创建.在这种情况下,如果定义一个采用命名参数tableView或声明一个名为的局部变量的方法tableView,则此局部声明将隐藏名为(但不是属性)的实例变量tableView.

在这种情况下UITableViewController,没有名为的实例变量tableView.有一个声明的属性名称tableView,因为它位于不同的名称空间中,不会被本地(变量)声明隐藏.

避免编译器警告的一个简单方法是为实例变量指定一个不同的名称.例如,可以命名实例变量_tableView,并且仍然可以命名属性tableView但是将其合成为@synthesize tableView = _tableView.