Предупреждение AppCode о массиве в стиле C в классе Objective-C - PullRequest
2 голосов
/ 24 декабря 2011
@implementation MonthView {
    DayView *dayViews[6][7];
}

Xcode не жалуется на этот код, но AppCode выдает предупреждение:

Указатель на неконстантный тип 'DayView * * const *' без явного времени жизни

Я намеревался создать блок указателей DayView 6x7, который будет частью макета памяти любого экземпляра MonthView.

Этот код делает то, что я хочу, и как я могу исправить это предупреждение?

1 Ответ

1 голос
/ 06 января 2012

То, что вы пытаетесь сделать, допустимо, но если приведенные выше комментарии верны, и это связано с ошибкой в ​​AppCode и полученным предупреждением, это приводит к серьезным последствиям (например, при использовании -Werror) или вам просто неприятно его получать, вы можете обойти его, просто разместив массив внутри -init .

Справедливое предупреждение: этот код отключеннаверху моей головы, и я не гарантирую, что он будет работать так, как написано.

@implementation MonthView { 
     DayView ***dayViews;
}

@interface MonthView
     - (id)init {
          if ((self = [super init])) {
               int i;

               // do stuff here

               // Create the array
               dayViews = malloc(sizeof(id) * 6);
               dayViews[0] = malloc(sizeof(DayView *) * 6 * 7);

               for (i = 1; i < 6; i++) {
                    dayViews[i] = dayViews[0] + (i * 7);
               }
          }

          return self;
     }
@end

Этот код должен создавать двумерный массив, к которому вы можете обращаться как обычно, при минимальном количестве вызововчтобы malloc нужен.

...