#objective-c
#objective-c
Вопрос:
Как объявить массив символов, чтобы все функции, определенные внутри класса, могли использовать его с обновленными значениями.
Получение ошибок при определении данных char[4096] в определении @synthesize.
@interface A: NSObject
{
char data[4096];
}
@property(nonatomic,retain)char data;
@end
@implementation A
@synthesize data
@end
Я получаю сообщение «Нет объявления свойства ‘pData’, найденного в интерфейсе»
Комментарии:
1. Переменная класса является массивом, но определение свойства является символом.
Ответ №1:
Не уверен, почему вы получаете эту ошибку, но в вашем коде явно не так несколько вещей:
-
data
переменная экземпляра и свойство для нее имеют разные типы. Объявление свойства должно быть@property(nonatomic) char[4096] data;
-
Вы должны использовать атрибут retain только для свойств типов obj-c, для обычных типов c используйте assign (или ничего не указывайте, поскольку по умолчанию используется assign)
-
Подвергать ваш указатель на char прямым изменениям может быть не очень хорошей идеей — лучше сделайте ваше свойство доступным только для чтения и создайте специальный метод для изменения его содержимого:
@property(nonatomic, readonly) char[4096] data; - (void) changeData:...//some parameters here
PS Может быть, рассмотреть возможность использования NSString*
(или NSMutableString*
) вместо char[]?
P.P.S. Или, если вы просто храните какие-то случайные байтовые данные, рассмотрите возможность использования NSData / NSMutableData для этого. (Спасибо @bbum за это предложение)
Комментарии:
1. 4. Почему бы просто не использовать
NSData
? Оно явно предназначено для хранения пакета произвольных байтов.2. @bbum. Вы правы, NSString просто возникла в моем сознании из char как ассоциация.