访问者 - 目标C.

时间:2011-05-04 13:24:59

标签: objective-c

我是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];

3 个答案:

答案 0 :(得分:1)

你没有在任何地方设置id,所以它只是零。

另外,在旁注中,您必须释放分配init的对象。

答案 1 :(得分:1)

您想如何管理内存是上面的示例? char c[size]是一个数组,它将sizeof(char)* size字节作为类成员,但以相同方式声明的属性将读/写指针,而不是数据!我建议你使用 NSData * (或NSMutableData)而不是C-array,这是Obj-C的首选方式。

答案 2 :(得分:1)

为什么不使用NSStringNSData的实例作为实例变量而不是字符数组?例如:

@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中的数据类型,因此最好不要将它用作变量名。