客观c中[自我]意味着什么?

时间:2012-09-21 09:45:15

标签: objective-c ios

我刚刚阅读了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];

    });
  }            
}

这[自我]在这里意味着什么?

2 个答案:

答案 0 :(得分:10)

-self是一种方法defined in the NSObject protocol。它返回接收者,即您发送消息self的对象。如果您执行[a self],则会返回a,是的,如果您执行[self self](或self.self),则确实会返回self

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

答案 1 :(得分:8)

self相同,只是冗余电话。

[self self] // ---> Same object of self