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] 在这里是什么意思?

4

2 回答 2

10

-self协议中定义NSObject 的方法。它返回接收者,即您向其发送消息的对象self。如果你这样做[a self],你会a回来,是的,如果你这样做[self self](或self.self),你确实会self回来。

它在您应该附加新组件但打算观察整个对象的键值路径中可能很有用,例如在 Cocoa Bindings 中。我在您发布的代码中没有看到任何应用程序,但代理可能采用self不同的方式,指向代理本身,而不是远程/转发对象。

于 2012-09-21T09:49:29.917 回答
8

它是一样的self,只是一个多余的调用。

[self self] // ---> Same object of self
于 2012-09-21T09:48:51.043 回答