什么是NSObject的符合规范的类-self方法的目的是什么?(What is the purpo

2019-07-05 10:29发布

而已。 为什么会有人想要(至少作为一个公共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?