在Objective-C中,[self self]是什么意思?

11

我刚刚在阅读https://github.com/MugunthKumar/MKNetworkKit的源代码时,看到了这个。

    +(void) initialize {

  if(!_sharedNetworkQueue) {
    static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^{
      _sharedNetworkQueue = [[NSOperationQueue alloc] init];
      [_sharedNetworkQueue addObserver:[self self] forKeyPath:@"operationCount" options:0 context:NULL];
      [_sharedNetworkQueue setMaxConcurrentOperationCount:6];

    });
  }            
}

在这里,[self self] 的意思是什么?


1
我的第一个猜测是它指向了self的元类。也许有人可以确认这是否正确?关于ObjC元类的更多信息,请参见此处:http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html 还请阅读以下内容:http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html(“Objective-C使用元类来实现类方法等实际目标,但通常会隐藏元类。例如,[NSObject class]与[NSObject self]相同”) - Wolfgang Schreurs
2
@WolfgangSchreurs:不是的。 - Jesper
2个回答

10

-self是在NSObject协议中定义的一个方法。它返回接收者,也就是你发送消息self的对象。如果你执行[a self],你会得到a,而且如果你执行[self self](或者self.self),你确实会得到self

在键值路径中可能很有用,其中你应该添加一个新的组件,但是打算观察整个对象,比如在Cocoa绑定中。我没有看到在你发布的代码中使用此功能的任何应用,但是代理可能会以不同的方式采用self,以指向代理本身,而不是远程/转发对象。


8
这句话的意思是“它与self相同,只是多余的调用”。
[self self] // ---> Same object of self

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接