在对象中使用self?

时间:2010-10-22 18:17:04

标签: iphone objective-c cocoa-touch

我期待这个工作,只是认为如果我在本地宣布另一个名为“tableView”的变量,它会失败

NSLog(@"X: %@", [tableView delegate]); // Fails: tableView undeclared

NSLog(@"X: %@", [[self tableView] delegate]); // Works:

这是因为你需要自己来引用实际物体上的物品吗?

NB: 此代码位于UITableViewController中,因此delegate是UITableView上的属性。

2 个答案:

答案 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,再慢一点!以前的答案是一样的。