Domanda

Come si fa a dichiarare, impostare le proprietà, sintetizzare e mettere in atto una serie di int taglia 5 in Objective C? Sto scrivendo questo codice per un iPhone app. Grazie.

È stato utile?

Soluzione

Credo che la cosa "cacao-y" da fare è nascondere l'array int, anche se lo si utilizza internamente. Qualcosa di simile:

@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;
}

Altri suggerimenti

Ecco qualcosa da provare. Nel file .h:

@property int* myIntArray;

Poi, nel file .m:

@synthesize myIntArray;

Se si utilizza @synthesize, avrete bisogno di malloc / calloc l'array da soli, probabilmente durante init ().

In alternativa, si potrebbe scrivere le proprie funzioni di accesso e li hanno malloc / calloc se chiamato prima la matrice è stata allocata.

In entrambi i casi, ti consigliamo di liberare la matrice nel metodo dealloc ().

Questo è probabilmente ingenuo e sbagliato, come sto solo dilagare su Objective C me stesso, ma finora sembra funzionare per me.

Non si deve usare int in questo caso, se si desidera utilizzare un array. Utilizzare NSNumber e mettere quei 5 NSNumbers in 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

Il codice per l'interfaccia e l'implementazione con sintetizzare (non testato BTW). Cosa stai cercando di realizzare?

buona introduzione rapida

Ho una variabile di classe:

NSInteger myInt[5];

In modo che ho potuto usare il myInt normale [1] = 0 sintassi nel mio codice, ho creato una proprietà che restituisce un puntatore intero:

@property (nonatomic, readonly) NSInteger *myInt;

Poi ha creato il seguente metodo getter:

-(NSInteger *) myInt {
  return myInt
}

Ora posso usare qualcosa di simile class.myInt [1] = 0;

Beh, non so per certo questo funziona, ma sembra. Ho solo pensato che avrei messo questo là fuori se qualcun altro vuole provare.

Qualunque cosa tu faccia, è necessario essere consapevoli delle conseguenze.

Un array intero non è il riferimento contato. Tu non sai quante persone accedono esso. Tu non sai chi dovrebbe rilasciare e quando. Così si può facilmente avere una proprietà di tipo int *. Il setter avrà un puntatore e memorizzarlo nella variabile istanza. Il getter restituirà il contenuto della variabile di istanza. Funziona.

TUTTAVIA non si sa quando l'array dovrebbe essere assegnato o deallocato. Se si dispone di alcuni array statici (per esempio quattro diverse tabelle contenenti i numeri), non è un problema. Ma se si crea un array di interi con malloc (), qualcuno dovrebbe liberare () esso. Così, quando è questo sta per accadere?

A causa di dover gestire il ciclo di vita di un array manualmente è spazzatura, mi consiglia che si sia appena utilizza un NSArray di NSNumber, o si guarda NSPointerArray che può essere abusato di array negozio di interi con il conteggio di riferimento, o creare la propria classe come la classe lotteria in una risposta precedente, solo un po 'più flessibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top