2013-06-13 2 views
0

У меня есть UICollectionView которого CollectionView: numberOfItemsInSection: определяется следующим образом:Расхождения между профилями отладки/выпуска при подсчете элементов из списка свойств для numberOfItemsInSection для UICollectionView

- (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; 
} 

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

Любые идеи, что может быть здесь?

+1

Попытайтесь найти свойство уровня оптимизации в настройках сборки для своей цели и переключите его для профиля отладки на «-O» (то же, что и для Release). Если проблема возникнет в режиме отладки, я думаю, что это проблема с памятью. –

+0

Хорошо, это определенно заставляет профиль отладки вести себя одинаково. Говорят, память связана? –

+1

Да, поведение ARC может быть немного отличающимся для более низкого уровня оптимизации и может не деблокировать вещи должным образом (в надлежащее время). Промежуточный счет равен 0, потому что self.contents равен нулю. Пожалуйста, убедитесь, что с опцией уровня, установленным на -O в debug, и это даст нам еще один ключ :) –

ответ

0

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

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

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

Благодаря Артуру Озеренски за помощь.