Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SKNode可与NSMutableArray、GCD、枚举相比较_Ios_Objective C_Nsmutablearray_Grand Central Dispatch_Sknode - Fatal编程技术网

Ios SKNode可与NSMutableArray、GCD、枚举相比较

Ios SKNode可与NSMutableArray、GCD、枚举相比较,ios,objective-c,nsmutablearray,grand-central-dispatch,sknode,Ios,Objective C,Nsmutablearray,Grand Central Dispatch,Sknode,我的问题很简单,但我找不到任何直接的信息来证实或否认 我的问题是: 当通过SKNodes进行枚举时,是否应使用以下方法对其进行精细处理: SKNode *someTreeNode; NSArray *someArray = [someTreeNode children]; [someArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { //bla

我的问题很简单,但我找不到任何直接的信息来证实或否认

我的问题是:

当通过SKNodes进行枚举时,是否应使用以下方法对其进行精细处理:

SKNode *someTreeNode;
NSArray *someArray = [someTreeNode children];

        [someArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

//blah blah

}];
像NSMutableArray

如果您正在使用GCD并操作SKNode(someTreeNode),即添加和删除父节点?(此外,我可以在加载someArray时使用调度屏障进行阻止

但总而言之,这个问题的真正最低形式是:

SKNode是像NSArray一样线程安全,还是像NSMutableArray一样不安全

我的直觉告诉我这是不安全的,但就像我说的,我不能证实或否认这一点

感谢您在使用GCD(Grand Central Dispatch(es))和块处理呼叫时:

    [someMutableArray enumerateObjectsUsingBlock:^(id  _Nonnull obj,
                                    NSUInteger idx, BOOL * _Nonnull stop) {
        //some code
    }];

小心,甚至尽量不要使用,特别是如果使用使用相同处理代码的设备,并通过网络传输将这些对象连接在一起共享。最终会导致崩溃。也就是说,它们不是线程安全的…如果必须,请使用dispatch\u barrier\u async和dispatch\u sync编辑内容。

使用GCD时(中央大调度)与区块处理呼叫:

    [someMutableArray enumerateObjectsUsingBlock:^(id  _Nonnull obj,
                                    NSUInteger idx, BOOL * _Nonnull stop) {
        //some code
    }];


小心,甚至尽量不要使用,特别是如果使用使用相同处理代码的设备,并通过网络传输将这些对象连接在一起共享。最终会导致崩溃。也就是说,它们不是线程安全的…如果必须,请使用dispatch\u barrier\u async和dispatch\u sync来编辑内容。

这很简单问题是:对象是可变的还是不可变的?从容器的角度来看,即使枚举
NSArray
也是线程安全的。没有什么可以阻止数组中的对象从多个并发线程更改。在来回将我的枚举从NSArray枚举更改为SKNode枚举之后s、 我在执行SKNode枚举时没有崩溃。因此,在我这方面,我将称之为“安全”除非我再次遇到一些崩溃,我还没有遇到。我问这个问题的原因是,我正在使用一些NSMutableArray,在周末遇到了一些严重的枚举错误。我调试了它们,开始考虑SKNode并使用子数组。现在我已将它们恢复为标准枚举hods,不使用子数组,它们很好!很简单。问题是:对象是可变的还是不可变的?即使是枚举
NSArray
,从容器的角度来看也是线程安全的。没有什么可以阻止数组中的对象从多个并发线程更改。在来回将我的枚举从NSArray枚举更改为SKNode枚举,我在执行SKNode枚举时不会发生崩溃。因此,我将称它们为“安全”除非我再次遇到一些崩溃,我还没有遇到。我问这个问题的原因是,我正在使用一些NSMutableArray,在周末遇到了一些严重的枚举错误。我调试了它们,开始考虑SKNode并使用子数组。现在我已将它们恢复为标准枚举霍兹,不使用儿童阵列,他们很好!