不能在内部块中引用具有可变修改类型的声明

时间:2014-03-26 10:50:28

标签: ios objective-c grand-central-dispatch

这是我的代码片段,我收到了上述错误。

dispatch_async(background_thread, ^{
    cameras camera[10];
    .
    .
    for(int i=0; i<ncam; i++) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
            iPoint subPoints[10];
            subPoints[0].x = camera[i].x + ((int)camera[i].mindist)*cos(camera[i].dir + (camera[i].angle)/2);
            .
            .
            .
        });
    }
});

相机实际上是C型结构,错误在于相机阵列。有人请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的相机位于堆栈中,而objective-c在具有不支持引用计数的变量的块中工作严重。尝试在NSObject中移动此数组:

@interface TenCameras : NSObject
{
@public
    cameras camera[10];
}
@end

然后你的代码会是这样的:

dispatch_async(background_thread, ^{
    TenCameras tenCameras;
    .
    .
    for(int i=0; i<ncam; i++) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{
            iPoint subPoints[10];
            subPoints[0].x = tenCameras->camera[i].x + ((int)tenCameras->camera[i].mindist)*cos(tenCameras->camera[i].dir + (tenCameras->camera[i].angle)/2);
            .
            .
            .
        });
    }
});