Come passare valori per riferimento nell’objective C (iphone)

Ho una domanda molto semplice. Sono un nuovo programmatore per iPhone. La mia domanda è: qualcuno può dirmi come posso passare i valori facendo riferimento a una funzione in obj. C? So come farlo in VB e C #. Ma non so come farlo in Obj c.

Grazie

Il pass-by-reference in Objective-C è lo stesso di C.

L’equivalente al seguente codice C #:

void nullThisObject(ref MyClass foo) { foo = null; } MyClass bar = new MyClass(); this.nullThisObject(ref bar); assert(bar == null); 

è

 - (void)nilThisObject:(MyClass**)foo { [*foo release]; *foo = nil; } MyClass* bar = [[MyClass alloc] init]; [self nilThisObject:&bar]; NSAssert(bar == nil); 

e

 - (void)zeroThisNumber:(int*)num { *num = 0; } int myNum; [self zeroThisNumber:&myNum]; NSAssert(myNum == 0); 

Non c’è passaggio per riferimento (in senso C ++) nell’objective C. È ansible passare i propri oggetti per puntatore e per tipi primitivi per valore.

Esempio:

 void func(NSString* string) { ... } void func(NSInteger myint) { ... } .. NSString* str = @"whatever"; NSInteger num = 5; func(str); func(num); 

Se usi Objective C ++, che puoi fare nominando il tuo file con estensione .mm, o dicendo a Xcode di compilare tutti i sorgenti come Objective C ++, puoi passare i riferimenti nello stesso modo in cui lo fai con C ++, ad esempio:

 - (OSStatus) fileFileInfo: (FileInfo&)fi; 

Prova in questo modo:

  -(void)secondFunc:(NSInteger*)i { *j=20; //From here u can change i value as well //now i and j value is same (ie i=j=20) } -(void) firstFunc { NSInteger i=5; [self secondFunc :&i]; //i value is 20 } 

Spero che sia d’aiuto!!

Dipende da cosa intendi. La cosa più vicina C (e quindi Objective-C) ha un tipo di riferimento è puntatori. Come suggerisce il nome, i puntatori puntano a dati che esistono da qualche altra parte. Per ottenere che la cosa sia puntata devi dereferenziare il puntatore. Gli oggetti in Objective-C non sono mai direttamente accessibili: si usano sempre puntatori per parlare con loro. Puoi anche passare i puntatori ad altri tipi rispetto agli oggetti.

I puntatori sono una specie di argomento difficile. Consiglio vivamente di leggere su C per avere un’idea di loro.

C’è un argomento da avere se si desidera ottenere più di un indirizzo da una chiamata di funzione risultante. Puoi farlo invece creando una class wrapper e passando quella invece. Per esempio:

 @interface AddressWrapper : NSObject { NSArray *array; NSString *string; } @property (nonatomic, assign) NSArray *array; @property (nonatomic, assign) NSString *string; @end 

In * .m:

 @implementation AddressWrapper @synthesize array, string; @end -(void) getAddresses: (AddressWrapper*) wrapper { wrapper.array = myNSArray; wrapper.string = myNSString; }