Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Objective c 保留/复制块弧[iOS]_Objective C_Ios_Automatic Ref Counting_Block - Fatal编程技术网

Objective c 保留/复制块弧[iOS]

Objective c 保留/复制块弧[iOS],objective-c,ios,automatic-ref-counting,block,Objective C,Ios,Automatic Ref Counting,Block,我已经看到了很多答案,但我找不到任何解决问题的方法 我基本上有一个只使用类方法的类。我从不分配这个班。因此,我向它传递一个块,并将其存储在类的.h上的静态文件中,如下所示: static ErrorBlock _errorBlock; _errorBlock(error); 我以这种方式存储: _errorBlock = [errorBlock copy]; 我接收errorBlock作为方法的参数。经过一些计算后,我像这样调用块: static ErrorBlock _errorB

我已经看到了很多答案,但我找不到任何解决问题的方法

我基本上有一个只使用类方法的类。我从不分配这个班。因此,我向它传递一个块,并将其存储在类的.h上的静态文件中,如下所示:

static ErrorBlock _errorBlock;
   _errorBlock(error);
我以这种方式存储:

_errorBlock = [errorBlock copy];
我接收errorBlock作为方法的参数。经过一些计算后,我像这样调用块:

static ErrorBlock _errorBlock;
   _errorBlock(error);
值得一提的是,我是从类的类别调用它的。应用程序基本上返回:

EXC_BAD_ACCESSS(code=2, adress = 0xc)

当我检查_errorBlock值时,它是nil。因此,我的问题是,如何保持对块的活动引用?

如果_errorBlock为nil,则可以安全地说,它被分配了nil,并且没有保持其活动的引用。如果在NSObject*reference=someObject中创建引用,并且someObject被释放,则引用指针仍将指向someObject过去所在的位置,并且不应为零。检查在分配块时是否有问题,或者是否调用了块。在调用它之前,您可能还想检查一下_errorBlock是否存在。

我能够解决这个问题,完全取消了全局块的使用。此时,我使用块作为参数传递它们。

当此_errorBlock=[errorBlock copy];发生时,_erroBlock和erroBlock都不是零。一定有什么东西把它设为零。。还有什么东西用这个街区吗?任务完成后你能直接打电话吗?用同样的方法,没有别的东西叫它。我已经做了一个项目搜索,只是为了确定。我打开了一个新项目,这段代码对我来说很有用..:static void ^doStuffint a;+voidsetDoStuff:void^intinputN{doStuff=[inputN copy];}+voidperformDo{doStuff0;}-voidviewDidLoad{[ViewController setDoStuff:^int a{NSLog@%d,a;}];[super viewDidLoad];}-voidTouchesStart:NSSet*TouchwithEvent:UIEvent*event{[ViewController performDo];}