2012-09-21 7 views
8

Stavo leggendo qualche codice sorgente di https://github.com/MugunthKumar/MKNetworkKit, e visto questocosa significa [auto stesso] nell'obiettivo 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]; 

    }); 
    }    
} 

cosa vuol [auto auto] significa qui?

+1

La mia prima ipotesi è che punta alla meta classe di sé. Forse qualcuno può confermare se questo è vero? Maggiori informazioni sulle meta classi di ObjC qui: http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html Leggi anche quanto segue: http://www.sealiesoftware.com /blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html ('Objective-C utilizza metaclassi per scopi pratici come i metodi di classe, ma tende a nascondere i metaclassi. Ad esempio, [classe NSObject] è identica a [NSObject self]') –

+2

@WolfgangSchreurs: No. – Jesper

risposta

10

-self è un metodo defined in the NSObjectprotocol. Restituisce il destinatario, ovvero l'oggetto al quale si invia il messaggio self. Se si fa [a self], si ottiene a indietro, e sì, se lo si fa [self self] (o self.self), si ottiene effettivamente self indietro.

Può essere utile nei percorsi con valori-chiave in cui si suppone di aggiungere un nuovo componente, ma si intende osservare l'intero oggetto, come in Cocoa Bindings. Non vedo alcuna applicazione di questo nel codice che hai postato, ma può essere il caso che i proxy adottino lo self in modo diverso, per puntare al proxy stesso, piuttosto che all'oggetto remoto/inoltrato.

8

È lo stesso di self, solo una chiamata ridondante.

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