2012-05-07 2 views
1

Как установить указатель на массив C в моем конструкторе?Как создать массив c?

@implementation NSBufferedInputStream { 
    char *buffer; 
    int bufferSize; 
} 

- (id)initWithFileAtPath:(NSString *)path 
{ 
    self = [super initWithFileAtPath:path]; 
    if (self) { 
     bufferSize = 100; 
     buffer = char[bufferSize]; // ERROR: Expected expression 
    } 
} 
@end 
+1

С быстрым взглядом я бы сказал, потому что c не поддерживает динамические массивы без использования malloc или что-то в этом роде. – Daniel

ответ

1

Если вы действительно нужен массив динамически размера,

- (id)initWithFileAtPath:(NSString *)path 
{ 
    self = [super initWithFileAtPath:path]; 
    if (self) { 
     bufferSize = 100; 
     buffer = malloc(sizeof(char) * bufferSize); 
    } 
} 

- (void)dealloc 
{ 
    free(buffer); 
    [super dealloc]; 
} 

в противном случае, если размер массива известен во время компиляции, просто изменить Ивар от char *buffer; к:

char buffer[100] 
+0

Зачем вам использовать dealloc, если у Apple теперь есть автоматический подсчет ссылок? –

+0

ARC не может справиться с освобождением ваших 'malloc()' вызовов для вас - если вы используете 'malloc()', вы должны использовать 'free()'. Поэтому реализация '-dealloc' здесь важна, но если вы используете ARC, вы должны * не * называть' [super dealloc]; ', поскольку это будет обрабатываться автоматически. – andyvn22

0

Если размер массива является динамическим - использовать malloc, если нет, то вы должны сделать это при объявлении:

@implementation NSBufferedInputStream { 
    char buffer[100]; 
    int bufferSize; 
} 
+0

Когда вы говорите динамически, возможно ли увеличить размер массива без копирования его содержимого? Это было бы очень полезно. В этой ситуации у меня есть метод setBufferSize, в котором я могу изменить размер буфера перед загрузкой файла. –

+0

Да, вызывая 'realloc'. – MByD

+0

Вы знаете, использует ли NSMutableArray realloc? В настоящее время у меня есть оболочка NSObject для моих структур, поэтому я могу использовать NSMutableArray, и это неэффективно. –

Смежные вопросы