我正在尝试进行故障保护以确保永远不会尝试执行空块。为此,我使用了一个自定义属性getter,如果它不为null则返回该块,否则返回一个空块。 但是!始终输入if
语句!然后,当我试图返回块时,我得到一个EXC_BAD_ACCESS
!
看起来没有定义块,因为它的值为0x0000000000000000
,而__FuncPtr
为NULL
,为什么这个if
语句是输入
我的块声明为:
@property (nonatomic, assign) void (^pinPadCompletionBlock)(bool);
答案 0 :(得分:1)
问题在于如何宣布财产。 无法将块声明为assign
。只需更改您的声明即可使用copy
,而不是:
@property (nonatomic, copy) void (^pinPadCompletionBlock)(bool);
此外,如果你看起来比__FuncPtr
更远,你会看到块内有设定值,这意味着该块实际上不是空的,尽管调试器读数。所以,代码在输入该语句时表现正常,我认为你会发现在将assign
更改为copy
之后,当你到达时,块的值将更明显是非空的。 if
声明..