0

キャッシュされた画像の配列を返したい。コードを参照してください。作成した配列を返したいだけですが、それができず、dispatch_get_main_queue配列を返すようにコードを変更する方法がわかりません。これは簡単だと思いますが、低レベルの C / GCD 構文に苦労しています。ありがとう。

-(NSArray *)returnArray
{

    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"something" ofType:@"plist"];
    NSArray *array = [NSArray arrayWithContentsOfFile:plistPath];

    NSMutableArray *finalArray = [[NSMutableArray alloc] initWithCapacity:array.count];

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);


    dispatch_async(queue, ^{
       ]
        for(int i=0;i<array.count; i++) {

            NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:[array objectAtIndex:i]];

            UIImage *frameImage = [UIImage imageWithContentsOfFile: filePath];
            UIGraphicsBeginImageContext(frameImage.size);
            CGRect rect = CGRectMake(0, 0, frameImage.size.width, frameImage.size.height);
            [frameImage drawInRect:rect];
            UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            [finalArray addObject:renderedImage];

        }

        dispatch_sync(dispatch_get_main_queue(), ^{
            //THIS IS WHAT IM TRYING TO DO, BUT I CANT
            return finalArray;
        });

    });

}
4

1 に答える 1

1

非同期性を犠牲にせずにこれを行うことはできません。その値を引数として受け取る関数を作成し、引数として finalArray を渡して呼び出す必要があります。したがって、次のような制御フローの代わりに (-> は「呼び出し」を示し、<- は「戻り」を示します):

returnArray -> 
    async (private queue) -> 
        sync (main queue) <-
    ... <-
returnArray <-

次のようになります。

returnArray -> 
    async (private queue) -> 
        sync (main queue) ->
            useArray (array)
于 2013-02-05T20:53:02.913 に答える