Есть ли причина, по которой NSOperationQueue работает в основном потоке на ios 4.2.1 и работает на отдельном потоке (как и ожидалось) на ios 5.0.1.
Я использую NSOperationQueue для выполнения занятой операции с большим количеством картинок (ALassets) при запуске моего приложения, но он запускается в главном потоке на ios4, а не на ios5 ...
Вот кусок кода
из основного потока:
cacheManager = [[PicturesCacheManager alloc] initWithDelegate:self];
//start the generation of the pictures array
NSLOG(@"setUpToDatePicturesArray");
operationQueue = [[NSOperationQueue alloc] init];
[operationQueue addOperation:cacheManager];
[cacheManager release];
Из PictureCacheManager:
- (id)initWithDelegate:(id <CachePicturesProtocol> )delegatePic
{
self = [super init];
if (self) {
// Initialization code here.
[self setDelegate:delegatePic];
}
return self;
}
-(void)main{
[self loadCurrentCameraRoll]; //do lot of stuff
}
-(void)loadCurrentCameraRoll{
//NSLOG(@"loadCurrentCameraRoll");
// photos
void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
//photos only!
if(result != NULL && [[result valueForProperty:@"ALAssetPropertyType"] isEqualToString:@"ALAssetTypePhoto"]) {
//Do stuff
}
};
void (^assetGroupEnumerator)( ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {
NSLOG(@"current group = %@", group);
[group enumerateAssetsUsingBlock:assetEnumerator];
}
else{
//we've enumerated all the groups
}
};
assetsList = [[NSMutableArray alloc] init];
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:assetGroupEnumerator
failureBlock: ^(NSError *error) {
NSLOG(@"Failure : %@", [error description]);
}];
}
ОБНОВЛЕНИЕ: похоже, что дело в enumerateGroupsWithTypes: usingBlock: failBlock: метод.
Прежде чем я это называю, я на самом деле в отдельном потоке, но после этого он переключается на основной поток ...