Accessor-Objective C - PullRequest
       1

Accessor-Objective C

0 голосов
/ 04 мая 2011

Я новичок в 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 ]

1 голос
/ 04 мая 2011

Как вы хотите управлять памятью, пример выше?char c[size] - это массив, и он будет принимать sizeof (char) * size байтов в качестве члена класса, но объявленное таким же образом свойство будет читать / записывать указатель , а не данные!Я предлагаю вам использовать NSData * (или NSMutableData) вместо массива C, это предпочтительный способ для Obj-C.

1 голос
/ 04 мая 2011

Почему бы не использовать экземпляр 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, поэтому лучше не использовать его в качестве имени переменной.

1 голос
/ 04 мая 2011

Вы нигде не установили id, так что просто оно будет равно нулю.

Кроме того, отметьте, что вы должны освободить объекты, выделенные вами init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...