2012-09-21 17 views
8

Ich habe nur einige Quellcode https://github.com/MugunthKumar/MKNetworkKit zu lesen, und das sahWas bedeutet [self self] in objective c?

+(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]; 

    }); 
    }    
} 

was bedeutet, dass [self self] hier bedeuten?

+1

Meine erste Vermutung ist, dass es auf die Meta-Klasse von Selbst verweist. Vielleicht kann jemand bestätigen, ob das stimmt? Weitere Informationen über Meta-Klassen von ObjC finden Sie hier: http://cocoaithloth.com/2010/01/what-is-meta-class-in-objective-c.html Lesen Sie auch Folgendes: http://www.sealiesoftware.com /blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html ('Objective-C verwendet Metaklassen für praktische Ziele wie Klassenmethoden, tendiert aber ansonsten dazu, Metaklassen zu verbergen. Zum Beispiel ist [NSObject-Klasse] identisch mit [NSObject self]') –

+2

@WolfgangSchreurs: Nein. – Jesper

Antwort

10

-self ist ein Verfahren defined in the NSObjectprotocol. Sie gibt den Empfänger zurück, dh das Objekt, an das Sie die Nachricht self senden. Wenn Sie [a self] tun, erhalten Sie a zurück, und ja, wenn Sie [self self] (oder self.self) tun, erhalten Sie tatsächlich self zurück.

Es kann in Schlüssel-Wert-Pfaden nützlich sein, wo Sie eine neue Komponente anhängen sollen, aber das gesamte Objekt wie in Cocoa Bindings beobachten möchten. Ich sehe keine Anwendung davon in dem Code, den Sie gepostet haben, aber es kann der Fall sein, dass Proxies self anders annehmen, um auf den Proxy selbst und nicht auf das entfernte/weitergeleitete Objekt zu zeigen.

8

Es ist das gleiche wie self, nur ein redundanter Aufruf.

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