Расхождения между профилями отладки / выпуска при подсчете элементов из списка для numberOfItemsInSection для UICollectionView

У меня есть UICollectionView, чей collectionView:numberOfItemsInSection: определяется следующим образом:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return self.contents.count;
}

self.contents лениво распределяется следующим образом:

- (NSArray *)contents
{
    if (!_contents) {
        _contents = [[XYZSharedMemoryStore sharedStore] clContents];
    }
    return _contents;
}

clContents возвращает NSArray следующим образом:

- (NSArray *)clContents
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"cl_contents" ofType:@"plist"];
    NSArray *products = [[NSArray alloc] initWithContentsOfFile:path];
    return products;
}

XYZSharedMemoryStore - это одиночный элемент, определенный следующим образом:

+ (id)sharedStore
{
    static XYZSharedMemoryStore *sharedStore = nil;
    if (!sharedStore) {
        sharedStore = [[super allocWithZone:NULL] init];
    }
    return sharedStore;
}


+ (id)allocWithZone:(NSZone *)zone
{
    return [self sharedStore];
}


- (id)init
{
    self = [super init];
    if (self) {
        // STUFF
    }
    return self;
}

Проходя полный круг, проблема, с которой я сталкиваюсь, заключается в том, что self.contents.count в collectionView:numberOfItemsInSection: возвращает 0, когда я нахожусь в профиле выпуска, и правильное число (10) в режиме отладки, поэтому в профиле выпуска мой UICollectionView не отображает никаких ячеек. Профили находятся в состоянии по умолчанию, в котором Xcode создает их.

Есть идеи, что здесь может происходить?

1 ответ

Решение

Итак, это был случай ошибки программиста...

Я устанавливал свой self.contents как слабую ссылку, поэтому по всем правам он должен был быть немедленно освобожден и всегда возвращать счетчик 0. Поскольку конфигурация отладки имеет уровень оптимизации None [-O0], она не была освобождена немедленно, позволяя мне использовать его.

Конфигурация релиза имеет значение Fastest, Smallest [-Os], что приводит к немедленному освобождению массива со слабой ссылкой, что не позволяет моему UICollectionView собирать его значения.

Спасибо Артуру Озеранскому за помощь.

Другие вопросы по тегам