Si desea devolver un valor, a continuación, devuelve un valor. Pase por referencia en Cocoa/iOS se limita en gran medida a NSError**
.
Dado:
+(void)fileName:(NSString *) file
Después, realice:
+(NSString *) fileName;
y hacerse con él.
Si necesita devolver más de un valor a la vez, eso exige una estructura o, más a menudo, una clase.
En Objective-C, pase por referencia huele como si lo estuviera haciendo mal.
Pasar por referencia en Objective-C está reservado en gran parte para devolver NSError*
información sobre un fallo recuperable, donde el valor de retorno del método en sí mismo indica si la tarea solicitada correctamente o no (se puede pasar NULL
como el argumento NSError**
para permitir que el método optimice la creación de dichos metadatos de error).
Pasar por referencias también se usa para recuperar el estado interior de los objetos donde el valor de retorno es efectivamente un multivalor. Es decir. métodos de AppKit como el siguiente. En estos casos, los argumentos de paso por referencia son normalmente opcionales o actúan como valores de retorno secundarios.
Se utilizan con bastante frecuencia en la API. Ciertamente, se utiliza para pasar por referencia, pero, como se dijo anteriormente, hacerlo debería ser bastante raro y aún más raro en el código de la aplicación. En muchos casos, y en algunos de los casos a continuación, potencialmente, un mejor patrón sería crear una clase que pueda encapsular el estado y luego devolver una instancia de dicha clase en lugar de pasar por referencia.
NSWorkspace.h:- (BOOL)getInfoForFile:(NSString *)fullPath application:(NSString **)appName type:(NSString **)type;
NSTextView.h:- (void)smartInsertForString:(NSString *)pasteString replacingRange:(NSRange)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
NSAttributedString.h:- (BOOL)readFromURL:(NSURL *)url options:(NSDictionary *)options documentAttributes:(NSDictionary **)dict;
NSNib.h:- (BOOL)instantiateWithOwner:(id)owner topLevelObjects:(NSArray **)topLevelObjects NS_AVAILABLE_MAC(10_8);
NSSpellChecker.h:- (NSRange)checkGrammarOfString:(NSString *)stringToCheck startingAt:(NSInteger)startingOffset language:(NSString *)language wrap:(BOOL)wrapFlag inSpellDocumentWithTag:(NSInteger)tag details:(NSArray **)details NS_AVAILABLE_MAC(10_5);
+1 La llamada al método tendrá que cambiarse a [function fileName: & file] –
@bbum: El parámetro * podría * ser un parámetro in/out, pero incluso entonces. . . – dreamlax