¿Cómo declaras, configuras propiedades, sintetizas e implementas una matriz int de tamaño 5 en el Objetivo C? Estoy escribiendo este código para una aplicación de iPhone. Gracias.Declarar, Propiedades, Sintetizar e Implementar matriz int [] en el Objetivo C
Respuesta
Creo que lo "Cacao-y" hacer es ocultar la matriz int incluso si se utiliza internamente. Algo así como:
@interface Lottery : NSObject {
int numbers[5];
}
- (int)numberAtIndex:(int)index;
- (void)setNumber:(int)number atIndex:(int)index;
@end
@implementation Lottery
- (int)numberAtIndex:(int)index {
if (index > 4)
[[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
return numbers[index];
}
- (void)setNumber:(int)number atIndex:(int)index {
if (index > 4)
[[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
numbers[index] = number;
}
Eso es exagerado. Use una matriz C –
¿Cómo haría eso? Creo que eso es lo que he querido hacer originalmente con la matriz int. –
Eso * es * usando una matriz C, Roger. Pero elimina todas las molestias de memcpy y detalles de bajo nivel que realmente no pertenecen a una interfaz Cocoa. – Chuck
No debe usar int en este caso si desea usar una matriz. Use NSNumber y ponga esos 5 NSNumbers en un NSMutableArray.
@interface testClass: NSObject {
NSMutableArray* numbers;
}
@property (nonatomic, retain) NSMutableArray* numbers;
-(id)initWithValue:(NSNumber *)initialValue;
@end
@implementation testClass
@synthesize numbers;
-(id)initWithValue:(NSNumber *)initialValue {
numbers = [[NSMutableArray alloc] initWithCapacity:5];
[numbers addObject:initialValue];
return self;
}
@end
Es el código para la interfaz y la implementación con sintetizar (no probado BTW). ¿Qué está tratando de lograr?
Gracias por la respuesta rápida. La razón por la que quería usar una matriz de entradas es que estoy tratando de almacenar 5 números aleatorios/únicos entre 1: 1000 y quería una estructura fácil para verificar si cada int posterior es único. Parece que esto será mucho más difícil usando NSMutableArray. ¿Que sugieres? –
Ahh, entonces tal vez en un bucle for verifique si intArray [i] == intArray [i-1] falla? Ciertamente hay más sobrecarga usando los objetos objc, puede ser mejor usar int []. ¿Puedes mantener la matriz de enteros como una variable local en el método en el que estás generando los números? ¿O necesita que sea una propiedad accesible de la clase? – ryanday
Quiero que sea una variable de instancia porque la clase es parte del modelo en un MVC. Sin embargo, ¿la sobrecarga adicional sería significativa si el tamaño es solo 5? –
tengo una variable de clase:
NSInteger myInt[5];
Así que podría utilizar la normalidad myInt [1] = 0 sintaxis en mi código, he creado una propiedad que devuelve un puntero entero :
@property (nonatomic, readonly) NSInteger *myInt;
creó entonces el siguiente método de obtención:
-(NSInteger *) myInt {
return myInt
}
Ahora puedo usar algo como class.myInt [1] = 0;
Bueno, no estoy seguro de que esto funcione, pero parece que sí. Solo pensé en poner esto por ahí si alguien más quiere probarlo.
Aquí hay algo que probar. En el archivo .h:
@property int* myIntArray;
A continuación, en el archivo .m:
@synthesize myIntArray;
Si utiliza @synthesize, que necesitará para malloc/calloc la matriz a sí mismo, probablemente durante init ()
Como alternativa, podría escribir sus propias funciones de acceso y tenerlas malloc/calloc si se llama antes de que se haya asignado la matriz.
De cualquier forma, deseará liberar la matriz en el método dealloc().
Esto es probablemente ingenuo y erróneo, ya que estoy aumentando el Objective C, pero hasta ahora parece estar funcionando para mí.
+1 ¡Excelente primera respuesta! – bakoyaro
Hagas lo que hagas, debes ser consciente de las consecuencias.
Una matriz de enteros no es referencia contada. No sabes a cuántas personas acceden. No sabes quién debería desasignarlo ni cuándo. Por lo tanto, puede tener fácilmente una propiedad de tipo int *. El colocador tomará un puntero y lo almacenará en la variable de instancia. El getter devolverá el contenido de la variable de instancia. Simplemente funciona.
SIN EMBARGO usted no sabe cuando la matriz debe ser asignada o desasignada. Si tiene algunas matrices estáticas (por ejemplo, cuatro tablas diferentes que contienen números), no hay problema.Pero si creas una matriz de enteros con malloc(), alguien debería liberarlo(). Entonces, ¿cuándo va a suceder esto?
Como tener que manejar la vida útil de una matriz manualmente es una basura, le recomendaría que simplemente use una NSArray de NSNumber o mire NSPointerArray, que puede utilizarse para almacenar matrices de enteros con recuento de referencias, o usted crea su propia clase como la clase Lotería en una respuesta anterior, solo un poco más flexible.
- 1. declarar una matriz de INT const en C++
- 2. Cómo definir e implementar propiedades en el protocolo
- 3. Objetivo c int para el cálculo doble
- 4. Objetivo-C: ¿Debo declarar métodos privados?
- 5. ¿Imprimir matriz en objetivo-c?
- 6. Cómo implementar big int en C++
- 7. Objetivo C - matriz con números
- 8. ¿Cómo declarar e implementar una interfaz COM en C# que hereda de otra interfaz COM?
- 9. Script Xcode para generar/sintetizar propiedades
- 10. Declarar e inicializar variables en bucle for
- 11. ¿Cómo declarar e iterar una matriz en XSLT?
- 12. Declarar e inicializar una matriz de cadenas en VB.NET
- 13. ¿Diferencia entre long e int en C#?
- 14. ¿Cómo puedo declarar e inicializar una matriz de punteros a una estructura en C?
- 15. Asignar e iniciar objetos en el Objetivo C
- 16. ¿Qué representa el símbolo @ en objetivo-c?
- 17. Objetivo C Convert int a NSString (iPhone)
- 18. c Objetivo: Comprobar si enteros/int/número
- 19. objetivo c "¿Olvidaste anidar alloc e init?"
- 20. funciones virtuales en C Objetivo
- 21. Objetivo C int La conversión a flote
- 22. Longitud de una matriz en el objetivo C
- 23. Declarar e inicializar constante en el archivo de cabecera
- 24. declarar un int anulable (int?) Usando XAML
- 25. Compilar C# en el objetivo-C
- 26. ¿Cuál es la diferencia entre int x = 1 e int x (1) en C++?
- 27. ¿Declarar const puntero a int?
- 28. Añadiendo char e int
- 29. Cuándo NO se debe usar el asterisco (*) al declarar una variable en el Objetivo C
- 30. Declaración e inicialización de matrices en C
si no puede pasar de este paso, le recomiendo encarecidamente que REALMENTE DEBE obtener el libro de Aaron Hillegas sobre la programación de Cocoa. – KevinDTimm
La cuestión es que sé que podría salirse con la suya con un NSMutableArray o simplemente tengo 5 entradas independientes, ya que el tamaño se fija en 5, pero tener una serie de entradas sería mucho más elegante. También me gustaría saber cómo para el futuro. He escrito en varios otros idiomas, pero parece que no puedo encontrar una respuesta definitiva sobre cómo hacerlo en el objetivo c para el iphone. –