Objective c 使用Byte*代替NSData:我的代码可以吗?
这段代码可以正常工作,但我基本上是在瞎琢磨自己对C语言的缺乏。这段代码可以正常工作,似乎比每次需要进行方法调用时创建Objective c 使用Byte*代替NSData:我的代码可以吗?,objective-c,bytearray,Objective C,Bytearray,这段代码可以正常工作,但我基本上是在瞎琢磨自己对C语言的缺乏。这段代码可以正常工作,似乎比每次需要进行方法调用时创建nda实例要快。但它可以(没有泄漏,没有指针抓到)吗 我特别担心转换为Byte*,这是使编译器向下运行所必需的: 以下是简化的代码: - (BOOL) isThisMethodOkay { // I have a length, range and an NSData instance Byte bytes[self.data.length]; [self
nda
实例要快。但它可以(没有泄漏,没有指针抓到)吗
我特别担心转换为Byte*
,这是使编译器向下运行所必需的:
以下是简化的代码:
- (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;
}
注意:所有代码都在ARC下。此代码很好,因为您没有使用分配堆中内存的
malloc
w。没有泄漏您只是创建一个本地字节
数组。没有内存泄漏,因为字节
是一个使用堆栈的数组。如果您计划处理任何大量的数据,您可能需要考虑将数据分配到堆上,然后在完成时释放它。(您还应该能够使用uint8\u t
而不是Byte
)
谢谢1) 什么是“大量?”我可能永远不会超过32个字节,2)第二种方法“WhataBootThis”呢?如果你知道不会超过32个字节,那就好了。看起来iOS上的主线程仅限于。如果
Byte
是某种形式的char(1字节),那么这个也可以,谢谢。whatAboutThis
方法中的强制转换如何?
- (BOOL) isThisMethodOkay {
// I have a length, range and an NSData instance
uint8_t *bytes = malloc(self.data.length);
[self.data getBytes:&bytes range:range];
BOOL result = [self doSomething:bytes length:length];
free(bytes);
return result;
}