Pregunta

Estoy escribiendo un método en Objective-C, que es para devolver una cadena basada en una entrada NSMutableArray. No tengo la intención de las personas que llaman a modificar la cadena, pero no me importa tampoco. la firma actual del método lee como:

- (NSMutableString *) generateString:(NSMutableArray *)myArray

El proyecto se encuentra actualmente una herramienta Fundación de línea de comandos con el fin de aprender las cuerdas, pero esto será en última instancia, terminan en una aplicación de iPhone.

Mis preguntas son:

  1. ¿Sería más prudente devolver un NSString?

2) Al devolver el NSMutableString debo usar autorelease? Si está recomendando puedo devolver un NSString ¿cómo se modifican devolverlo?

3) Si también quiero devolver un objeto de error identificar si se ha producido un error, tal vez una enumeración y una cadena, ¿cómo funciona la propiedad en ese caso? El método no se llama alloc, nueva o copiar Entonces, ¿cómo los conocimientos de llamadas? ¿Cómo voy a devolver el objeto de error asignado, además de la cadena en el método anterior?

Gracias!

¿Fue útil?

Solución

  1. volvería un NSString en la mayoría de los casos. Tiene una superficie de memoria un poco más pequeño y si la persona que llama necesita una copia mutable, creando uno es sólo un método de distancia:. mutableCopy
  2. Usted no sólo debe pero Tiene a AutoRelease la NSString o NSMutableString sus devuelve el método (al menos si el nombre de su método como en el ejemplo)! La Gestión de memoria Guía de Programación reglas listas que debe seguir para evitar un desastre completo y explica todo en profundidad. Así que leerlo!
  3. La Fundación marco utiliza la clase NSError para describir errores. Para "retorno" parámetros adicionales que su método podría tener este aspecto:

    - (NSString *)generateString:(NSMutableArray *)myArray error:(NSError **)error
    {
        BOOL failed;
        // Do some fancy stuff, if the operation fails, failed is true
        if (failed == YES) {
            if (error != NULL) {
                *error = [NSError errorWithDomain:@"your_domain" code:123 userInfo:nil];
            }
            return nil;
        }
    
        return [yourString autorelease];
    }
    
    // ...
    
    // Calling your method
    NSError *error = nil;
    [someObject generateString:someArray error:&error];
    

Tenga en cuenta que los dos ** y que cualquier NSError var puede ser NULL y no nil (por lo que debe comprobar esto en el cuerpo del método).

Otros consejos

Por defecto métodos devuelven autorelease NSString, y me gustaría recomendar a utilizar el mismo comportamiento. Si se tendrá que modificar la cadena resultante, puede utilizar cadenas temporales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top