而已。 为什么会有人想要(至少作为一个公共API)的方法,如? 是否有任何实际用途?
Answer 1:
该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)。 这当然是可能的。
Answer 2:
我不知道为什么“自我”最初加入,但有一点它没有派上用场是保护内部对象指针。 苹果的官方建议是插入[富自我]叫你正在使用的内部指针完成后, 该方法调用不执行任何功能,但可以确保编译器保持FOO围绕在那之前。
Answer 3:
我认为这是与ObjC运行时做的。
objc_msgSend(autoreleasePool, sel_registerName("drain"));
BOOL AppDel_didFinishLaunching(struct AppDel *self, SEL _cmd, void *application, void *options)
第一个参数是自我。 我认为这是与这一点。 老实说,虽然,因为这将最终成为:
id self(struct id *self, SEL _cmd) {
return self;
}
....这更有意义之前,我开始写这篇回应。
文章来源: What is the purpose of the -self method in NSObject-conformant classes?