AppCode对Objective-C类中的c风格数组发出警告


@implementation MonthView {
    DayView *dayViews[6][7];
}

Xcode没有抱怨这个代码,但是AppCode给出了一个警告:

指向没有显式生命周期的非const类型"DayView * * const *"的指针

我的意图是创建一个6x7块的DayView指针,这将是任何MonthView实例的内存布局的一部分。

这段代码是我想要的吗,我该如何修复这个警告?

你试图做的是有效的,但是如果上面的注释是正确的,这是由于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所需的调用次数。

最新更新