Ce code fonctionne, mais je suis fondamentalement maladroit autour de mon manque de connaissance en C. Le code fonctionne et semble être plus rapide que de créer NData
instances chaque fois que je dois faire un appel de méthode. Mais est-ce correct (pas de fuite, pas de pointeur)?Utilisation de Byte * Au lieu de NSData: Mon code est-il correct?
Je suis particulièrement inquiet au sujet du casting de Byte*
qui était nécessaire pour obtenir le compilateur de tuyau vers le bas:
Voici est le code simplifié:
- (BOOL) isThisMethodOkay {
// I have a length, range and an NSData instance
Byte bytes[self.data.length];
[self.data getBytes:&bytes range:range];
return [self doSomething:bytes length:length]
}
- (BOOL) whatAboutThis {
return [self doSomething:(Byte*)self.data.bytes length:self.data.length];
}
- (BOOL) doSomething:(Byte*)bytes length:(NSUInteger)length {
return (length == CHECK_LENGTH && data1(bytes) == CHECK_DATA_1);
}
static int data1(Byte* bytes) {
int retVal = (int)bytes[1];
return retVal;
}
Note: tout le code est sous ARC .
Merci! 1) que seraient les "grandes quantités"? Je ne vais probablement jamais dépasser 32 octets et 2) qu'en est-il de la seconde méthode, "WhatAboutThis"? –
Si vous savez que vous ne dépasserez pas 32 octets, ça devrait aller. Il semble que le fil principal sur iOS soit limité à [taille de pile de 1 Mo] (http://stackoverflow.com/questions/2918691/is-there-stack-size-in-iphone). Qu'en est-il bien ainsi que tant que Byte est une forme de char (1 byte) – Joe