我对objective-c还是新手,我需要一些关于变量声明的见解。我的程序的重点是阅读分几NSData
部分传递的消息。每当程序接收到 aNSData
时,它就会将它作为无符号字符添加到已经部分完成的消息中。这意味着消息缓冲区必须定义为 的属性viewController
:
@property unsigned char* receiveBuf;
@property int bufSize;
此时程序有一个NSData
名为 data 的对象,并像这样对待它:
int len = [data length];
unsigned char* tempBytebuf = (unsigned char*)[data bytes];
for(int i = 0; i < len; i++){ //read all bytes
if (tempBytebuf[i] == 0x7E) { //this char means start of package
_bufSize = 0;
}
else if (tempBytebuf[i] == 0x7D) { //this char means end of package
[self readMsgByte:_receiveBuf :_bufSize];
}
else { //any other char is to be put in the message
_receiveBuf[_bufSize++] = tempBytebuf[i]; //Error happens here
}
}
如果我这样继续,将导致错误 EXC_BAD_ACCESS。如果我可以告诉程序为缓冲区保留空间,它将解决问题:
@property unsigned char receiveBuf[256];
但似乎我不能用@properties
. ViewDidLoad()
有没有办法在例如或其他地方分配该空间?谢谢你的支持!
编辑1:
看来我刚刚在我以前的一些代码中找到了解决方案,我应该在实现中声明我的 char 表。
@implementation ViewController
{
unsigned char msgBuf[256];
}
@property
不过,如果有人能告诉我变量声明的和空间之间的真正区别,implementation
那将阻止我犯类似这样的其他错误。非常感谢。