Objective c 使用Byte*代替NSData:我的代码可以吗?

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

这段代码可以正常工作,但我基本上是在瞎琢磨自己对C语言的缺乏。这段代码可以正常工作,似乎比每次需要进行方法调用时创建
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;
}