2009-04-25 5 views

risposta

14

Si potrebbe farlo allo stesso modo di qualsiasi altra funzione che si può scrivere in C. Quindi, se avete la funzione definita in un file di origine denominato myLibraryFunctions.m, chiunque volesse utilizzare tale funzione dovrebbe includere il file di intestazione in cui lo definisci (probabilmente myLibraryFunctions.h, e poi assicurati che si colleghino con il file oggetto (la maggior parte sarà fatto per te in Xcode se semplicemente crei un file per ospitare le tue funzioni "globali" e includi il file di intestazione per loro . in ogni file sorgente a cui si accede dalla Poi basta definirlo:

void analyzeThis(id anyObject); 

void analyzeThis(id anyObject) { 
    NSLog(@"Object %p: %zu, %@", anyObject, malloc_size(anyObject), anyObject); 
} 

Ma in realtà, si può scrivere tutto quello che volevamo nella funzione queste funzioni non h. essere parte di qualsiasi definizione di classe o qualcosa del genere. In questo caso, sono esattamente uguali a quelli che sarebbero in C.

+0

Grazie! Dov'è l'opzione nascosta in XCode per impostare quel file di funzione globale, in modo che XCode possa fare tutte le importazioni di intestazione per me? Sarebbe grandioso! – Thanks

+1

Aggiungi l'intestazione di importazione all'intestazione precompilata. Sarà quello con il nome del tuo progetto e poi _pch alla fine. Di solito è sotto il gruppo "Altre fonti" in un progetto Xcode. –

1

Stai cercando di reimplementare il metodo di descrizione di NSObject? Se si invia un messaggio NSObject, verrà restituita una stringa contenente informazioni su se stessa. Puoi eseguire l'override della descrizione (NSString *) e aggiungere ulteriori informazioni a questa stringa.

Se lo fai, scoprirai che la magia accade - ad esempio quando stampi un oggetto array nel debugger itererà tutti i membri dell'array e stamperà le loro descrizioni. Esistono

+0

Bel suggerimento, grazie. In realtà volevo provare qualcosa per quanto riguarda la gestione della memoria. Una funzione che verificherà prima di un messaggio di rilascio se l'oggetto esiste ancora. Può essere utile Non sono ancora sicuro. – Thanks

+1

Se si sta creando quel metodo per il debug, si dovrebbe davvero considerare l'utilizzo di NSZombie. Se lo si utilizza come protezione in fase di esecuzione, potrebbe causare altri problemi ... –

+0

Questo sembra completamente distinto da NSZombie. –

1

Due modi per fare questo:

  • scrivere una funzione globale, proprio come si farebbe in C
  • creare una categoria di NSObject in cui si implementa un metodo che poi sarà a disposizione di tutti classi che hanno NSObject come antenato.