0

我有一个 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;
}

转一圈,我遇到的问题是 collectionView:numberOfItemsInSection: 中的 self.contents.count:当我在发布配置文件中时返回 0,在调试模式下返回正确的数字(10),所以在发布配置文件中,我UICollectionView 不显示任何单元格。配置文件处于 Xcode 创建它们的默认状态。

有什么想法可能会在这里发生吗?

4

1 回答 1

0

所以,这是一个程序员错误的案例......

我将self.contents设置为弱引用,因此按照所有权利,它应该立即被释放并始终返回计数 0。由于调试配置的优化级别为None [-O0],因此它没有释放立即,允许我使用它。

发布配置设置为Fastest , Smallest [-Os],导致弱引用数组立即解除分配,不允许我的 UICollectionView 获取其值。

感谢 Artur Ozierański 的帮助。

于 2013-06-13T21:31:16.337 回答