就是这样。为什么会有人想要(至少作为公共API)这样的方法呢?有没有任何实际用途呢?
就是这样。为什么会有人想要(至少作为公共API)这样的方法呢?有没有任何实际用途呢?
self
方法在键值编码(KVC)中非常有用。
使用KVC,您可以将对象视为字典。您可以使用包含属性名称的字符串访问对象的属性,例如:[view valueForKey:@"superview"]
。您可以使用包含键路径的字符串遍历一系列属性,例如:[view valueForKeyPath:@"superview.superview.center"]
。
由于NSObject
具有self
方法,因此您可以将self
用作键或键路径:[view valueForKey:@"self"]
。因此,如果您正在以编程方式构造键路径或从文件中读取它们,则使用"self"
作为键可能会使您避免编写特殊情况。
您还可以在谓词中使用self
,例如:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith \"foo\""];
NSArray *filteredArray = [arrayOfStrings filteredArrayWithPredicate:predicate];
我不知道NSPredicate
在这种情况下是否实际使用self
方法(可能是通过KVC)。这是完全有可能的。
我不确定为什么最初加入了"self",但其中一个有用之处是保护对象的内部指针。苹果公司的官方建议是在完成对内部指针的使用后插入[foo self]调用;该方法调用在功能上没有任何作用,但确保编译器一直保留foo。
我认为这与ObjC运行时有关。
objc_msgSend(autoreleasePool, sel_registerName("drain"));
BOOL AppDel_didFinishLaunching(struct AppDel *self, SEL _cmd, void *application, void *options)
第一个参数是self。我认为这与它有关。说实话,因为它最终将成为:
id self(struct id *self, SEL _cmd) {
return self;
}
在我写这篇回复之前,它更有意义。
self
方法的理由?我也很好奇这个方法什么时候会有用。为什么我需要调用[self self]
或[someObject self]
?在这个问题之前,我甚至都没有注意到这个方法的存在。 - rmaddy