2011-04-29 26 views

risposta

12

in Objective-C quelli sono chiamati metodi di classe, e sono preceduti da un segno più (+)

@interface MyClass : NSObject 

+ (void)myClassMethod; 
- (void)myInstanceMethod; 

@end 
+1

Ok, ho capito per il metodo, ma ho bisogno anche di proprietà statiche ... – Maxime

11

metodi statici in Objective C sono noti come metodi di classe e iniziano con un segno '+', ad esempio:

+ (void)aStaticMethod 
{ 
    // implementation here 
} 

Le variabili statiche sono dichiarate utilizzando la parola chiave static.

+0

Grazie ... è chiaro ora! – Maxime

2

Non è possibile generare automaticamente le proprietà statiche ma è possibile creare manualmente i metodi statici getter e setter.

+ (NSObject *) myStaticValue; 
+ (void)setMyStaticValue:(NSObject *)value; 
0

se si desidera creare proprietà statiche significa che si sta creando una variabile di classe. le proprietà sono utilizzate solo per variabili di istanza. Se si crea una statica, tutti gli oggetti condividono la stessa variabile; Perché è una variabile di classe.

puoi dichiararlo nel file di implementazione della tua classe. Dovrebbe arrivare prima della direttiva del compilatore @implementation. Ma quella variabile statica può usare solo all'interno della sua classe. puoi usarlo tramite i tuoi metodi getter-setter non per proprietà.

2

Come altri hanno sottolineato, i metodi della classe statici sono preceduti da un segno più (+) nella dichiarazione, in questo modo:

@interface MyClass : NSObject 
    + (void)myClassMethod; 
@end 

Objective-C non ha proprietà statiche così semplice, ed è necessario salto attraverso i seguenti cerchi:

  1. dichiarare una variabile statica
  2. impostare metodi getter e setter per l'accesso ad esso
  3. mantenere il suo valore

Esempio completo:

static NSString* _foo = nil; 

@interface MyClass : NSObject 
    + (NSString *)getFoo; 
    + (void)setFoo; 
@end 

// implementation of getter and setter 
+ (NSString *) getFoo { 
    return _foo; 
} 

+ (void) setFoo:(NSString*) value { 
    if(_foo != value) { 
    [_foo release]; 
    _foo = [value retain]; 
    } 
} 

// optionally, you can set the default value in the initialize method 
+ (void) initialize { 
    if(!_foo) { 
    _foo = @"Default Foo"; 
    } 
} 

Io non sono un esperto Obj-C, ma questo sembra funzionare bene nel mio codice. Correggimi se qualcosa qui è spento.

Problemi correlati