2010-11-11 37 views
0

J'ai une classe d'une bibliothèque externe que je veux étendre avec une catégorie. Toutefois, cette classe utilise plusieurs variables statiques telles que:Objective-C Catégorie avec pointeurs statiques: comment éviter une erreur de symboles non définis?

static SomeClass* someClass; 

La méthode de catégorie J'extension doit faire un appel à cette classe, comme dans

-(void) categoryMethod 
{ 
    [someClass someMethod]; 
} 

Si je fais que le compilateur se plaignent:

'someClass' was not declared in this scope 

Je pensais que je dois probablement déclarer la SomeClass statique extern:

extern SomeClass* someClass; 

Cependant, cela conduit à l'erreur de liaison suivant:

"_someClass", referenced from: 
_someClass$non_lazy_ptr in UsingSomeClass.o 
(maybe you meant: _someClass$non_lazy_ptr) 
Symbol(s) not found 

Je pense que je manque quelque chose de simple et stupide. Je peux très bien utiliser la bibliothèque statique. Je devine que les variables statiques sont locales à la classe que je veux étendre, est-il possible de dire à l'éditeur de liens que ce sont les variables statiques que je veux utiliser?

Ou est-ce simplement impossible d'étendre une classe Objective-C qui utilise des variables statiques (respectivement où ma catégorie doit utiliser ces variables statiques)? Post-scriptum: puisque je lie la bibliothèque statique qui contient la classe que je veux étendre, j'ai fait face au problème qui doit être résolu avec les autres indicateurs de liens -ObjC et -all_load. Mais j'ai été passé, ce n'est pas le problème, je peux écrire des catégories pour d'autres classes dans cette bibliothèque statique.

Répondre

3

Une variable static en C (et, par conséquent, en Objective-C) ne peut pas être référencée en dehors de l'unité de compilation qui la définit. C'est un symbole interne auquel vous ne pouvez pas faire référence avec un "extern". Donc, non, votre méthode de catégorie ne peut pas accéder à cette variable statique de quelque manière que ce soit.

Notez également que cette utilisation du mot "statique" n'a rien à voir avec les bibliothèques statiques et dynamiques.

+0

Je m'inquiétais que les variables statiques soient locales et ne puissent pas être utilisées. Zut. Merci quand même. – LearnCocos2D