我期待这个工作,只是认为如果我在本地宣布另一个名为“tableView”的变量,它会失败
NSLog(@"X: %@", [tableView delegate]); // Fails: tableView undeclared
NSLog(@"X: %@", [[self tableView] delegate]); // Works:
这是因为你需要自己来引用实际物体上的物品吗?
NB: 此代码位于UITableViewController中,因此delegate是UITableView上的属性。
答案 0 :(得分:3)
那是因为第一个选项是尝试访问名为tableView
的变量或实例变量,该变量不存在。 (您可以通过转到“文件”菜单,选择“快速打开”,然后键入“UITableViewController.h”来验证这一点。您会看到UITableViewController
没有tableView
ivar)
第二个是通过方法-tableView
访问tableview,这是获得批准的方式。
顺便说一句,如果这是UITableViewController
子类,那么[[self tableView] delegate]
应该只是self
(但我假设你知道这一点)。
答案 1 :(得分:3)
对象中的实例变量与属性之间存在差异(ObjC中的@property语法)。
当你说
时[tableView delegate]
你指的是一个名为'tableView'的实例变量,它实际上并不存在。通常,UIKit中的实例变量以下划线开头,消息是您不应该直接使用它们。
另一方面:
[[self tableView] whatever...] //OR
[self.tableView whatever]
是指UITableView上名为'tableView'的属性。那确实存在。并且该属性是记录的访问该视图的方式,因此您真正想要访问它。
希望有所帮助。
编辑:ooops,再慢一点!以前的答案是一样的。