Расхождения между профилями отладки / выпуска при подсчете элементов из списка для 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 собирать его значения.
Спасибо Артуру Озеранскому за помощь.