我刚刚阅读了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];
});
}
}
这[自我]在这里意味着什么?
答案 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