我是Objective C的新手。
我需要知道如何使用访问器访问实例变量。 我能够访问整数变量,但不能访问我在此声明的字符变量。 如果以下代码中有任何错误,请更正。
#define SIZE = 4096
@interface data : NSObject
{
unsigned char id[SIZE];
}
@property(readwrite)unsigned char id[SIZE];
@end
@implementation data
@synthesize unsigned char id[SIZE];
@end
main.m
someClass* classPointer = [[someClass alloc]init];
data* dt = [[data alloc]init];
[classPointer createMessage:data.id];
答案 0 :(得分:1)
你没有在任何地方设置id
,所以它只是零。
另外,在旁注中,您必须释放分配init的对象。
答案 1 :(得分:1)
您想如何管理内存是上面的示例? char c[size]
是一个数组,它将sizeof(char)* size字节作为类成员,但以相同方式声明的属性将读/写指针,而不是数据!我建议你使用 NSData * (或NSMutableData)而不是C-array,这是Obj-C的首选方式。
答案 2 :(得分:1)
为什么不使用NSString
或NSData
的实例作为实例变量而不是字符数组?例如:
@interface Foo2 : NSObject
{
NSString *_dataId;
}
@property (nonatomic, retain) NSString *dataId;
@end
@implementation Foo2
@synthesize dataId = _dataId;
@end
否则你必须按照以下方式做点什么:
#define DATA_ID_SIZE 4096
@interface Foo : NSObject
{
char _dataID[DATA_ID_SIZE];
}
@property (nonatomic, assign) const char *dataID;
@end
@implementation Foo
// Returns a copy of the internal array of chars.
- (const char *)dataID
{
size_t length = strlen(_dataID);
// Dynamically allocate an array of chars to return.
char *buf = malloc(length);
// Copy the values from the internal array.
memcpy(buf, _dataID, length);
return buf;
}
- (void)setDataID:(const char *)dataID
{
// Copy provided chars into the internal array.
memcpy(_dataID, dataID, DATA_ID_SIZE);
// To be on the safe side, copy null character to the last element.
_dataID[DATA_ID_SIZE - 1] = '\0';
}
顺便说一句,id
是Objective-C中的数据类型,因此最好不要将它用作变量名。