Guantanamera escribió:dnL7up escribió:Sí entiendo la complicación que tienes sobre los NSString y lso NSArray.
Imagina que yo hago esto en Java.
private int[] miArray;
Es decir sólo declaro el array, pero como aún no sé el tamaño que debe tener no lo instancio, en otra parte del código sé el tamaño que ha de tener y hago:
miArray = new int[String.length];
Para instanciar el array de un tamaño igual a la cantidad de caracteres que tiene X String
Cómo podría hacer algo similar en Objective C?. En estas cosillas son en las que me voy perdiendo... Lo demás es sólo cuestión de tiempo y práctica. Me está gustando muchísimo Objective C.
Saludos!
Para declarar un array en Objective-c sólo debes hacer esto:
NSArray *miArray;
Para crear una instancia lo haces así.
miArray = [[NSArray alloc] initWithObjects:@Foo, @Bar, nil];
Los objetos
NSArray son estáticos, es decir no pueden ser modificados después, por lo que no tiene caso definir su tamaño, sino que se inician con objetos directamente.
Por otro lado también existen los
NSMutableArray, los cuales pueden ser modificados, en este caso puedes definir su tamaño al iniciarlo así:
NSMutableArray *suArray = [[NSMutableArray alloc] initWithCapacity:2];
Si bien es cierto que todo esto al principio no parece muy intuitivo, es por que los comparamos con lenguajes que son muy "shorthands" por decirlo de algún modo. Si lo pensamos a fondo la forma de hacer las cosas en Objective-C tiene todo el sentido del mundo.
Por ejemplo ¿Por que instanciar objetos anteponiendo una palabra reservada como "new" en lugar de usar un método de clase?
Como dato curioso, en este caso, el método que crea la instancia es
alloc, y no el constructor
initWithCapacity, en Objective-c los constructores son métodos de instancia.
Cabe señalar que en los últimos años el uso de Objective-C ha crecido tanto que Apple se ha esforzado mucho en hacer el lenguaje más fácil para quienes vienen de otros lenguajes, agregando muchos "shorthands" así como la sintaxis de puntos para getters y setters.
Por ejemplo hoy en día podemoos crear una NSArray así de fácil.
NSArray *miArray = @[@Foor, @Bar];
Esto técnicamente crea el mismo resultado que el primer ejemplo, de hecho el compilador literalmente convertirá nuestro
@[@Foor,
@Bar"] en [[
NSArray alloc]
initWithObjects:
@Foo,
@Bar,
nil].
Te recomiendo leer sobre
Modern Objective-C para conocer todas esas cosas que se han vuelto mucho más fáciles de hacer que antes.