Ios 在ReactiveObjc中使用@strongify(self)之前,我是否应该检查weakself的存在?

Ios 在ReactiveObjc中使用@strongify(self)之前,我是否应该检查weakself的存在?,ios,objective-c,block,reactive-cocoa,retain-cycle,Ios,Objective C,Block,Reactive Cocoa,Retain Cycle,正如《弱与强》中的另一个实践,它建议我们在强化它之前检查弱自身是否为空。看起来是这样的: __weak weakself = self someblock { if (weakself) { __strong self = weakself [self doSomeAction]; ... } } 我知道rac在前面做了很多工作,但我想确定我们是否有必要检查它。如果没有,@strongify(self)是如何做到这一点的。谢谢。不,您应该在strongify之后检查,因

正如《弱与强》中的另一个实践,它建议我们在强化它之前检查弱自身是否为空。看起来是这样的:

__weak weakself = self
someblock {
  if (weakself) {
    __strong self = weakself
    [self doSomeAction];
...
  }
}

我知道rac在前面做了很多工作,但我想确定我们是否有必要检查它。如果没有,@strongify(self)是如何做到这一点的。谢谢。

不,您应该在
strongify
之后检查,因为它可以在您将其strongify之前停止存在

strongify之后,它不会停止存在,即使检查
nil
也不需要任何同步。 我不知道你从哪里得到如此无效的推荐

if (weakself) { // not nil here
    __strong self = weakself //already nil here
    [self doSomeAction]; //you don't have retain cycles,
    // but there is a potentical crash, for example if you are calling blocks
@strongify完全按照您已经编写的方式进行操作,它只是一个方便的宏:

__strong typeof(weakSelf) self = weakself

一般来说,在Objective-C中几乎不需要检查
nil
,但某些特定情况除外。即使
self
nil
,您的代码在没有检查的情况下也能正常工作。