0

我从Apple 的 SimpleFTPSample 中获取了一些示例代码

看起来像这样:

@interface PutController () <UITextFieldDelegate, NSStreamDelegate>
...
@property (nonatomic, assign, readonly) uint8_t *buffer;
...
@end

@implementation PutController
{
    uint8_t _buffer[kSendBufferSize];
}
...
@end

但是当我将它复制到我的代码时,我得到一个错误:

属性“缓冲区”的类型(“uint8_t *”(又名“unsigned char *”))与实例变量“_buffer”的类型不匹配(“unsigned char [32768]”)

我的代码与他们的示例完全相同,但无法编译。这里发生了什么?

4

1 回答 1

1

不幸的是,虽然数组可以衰减为指针,但至少在使用 clang 时,它不会在属性中使用时自动衰减为只读指针。

解决此问题的最简单方法是使用第二个实例变量,它只是指向数组中第一个元素的指针,并让您的属性综合到该变量中,如下所示:

@interface MyObj : NSObject

@property (readonly) uint8_t *buffer;

@end

@implementation MyObj {
    uint8_t *_bufferPtr;
    uint8_t _buffer[1024];
}

@synthesize buffer = _bufferPtr;

-(id) init {
    if (self = [super init]) {
        _bufferPtr = &_buffer[0];
    }

    return self;
}

@end

或者,只需实现您自己的 getter 实现,即可简单地将指针返回到buffer. 这是你的电话,真的。

它不是最佳的,但它似乎确实按照您想要的方式工作。

于 2013-05-17T17:08:35.620 回答