ios-ivar在块内为空,但在块执行之前设置

ios-ivar在块内为空,但在块执行之前设置,ios,block,ivar,Ios,Block,Ivar,我有以下代码: [GetUserData getUserDataWithBlock:^(UserData *userData, NSError *error) { self.userData = userData; #1 self.userData.fbUser = user; // Call REST API of server 'GetAllWords'

我有以下代码:

[GetUserData getUserDataWithBlock:^(UserData *userData, NSError *error)
              {
                  self.userData = userData;
              #1  self.userData.fbUser = user;
                  // Call REST API of server 'GetAllWords'
                  [GetAllWords getAllWordsWithBlock:^(NSSet *newWords, NSError *error)
                   {
                       [self saveAllWords:newWords];
                   #2  [self showRootView];
                   }];
              }];
问题是,
self.userData
在#1中设置正确(且不为null),但当我进入#2-
self.userData
时变为null。。。
点1是我唯一设置
self.userData

的地方,如果
userData
属性被定义为
weak
(特别是
getAllWordsWithBlock
异步运行),我可以想象您描述的行为

如果不是,我建议对基础变量设置一个“监视”:

  • 在代码中的点#1(可能在点#2)设置断点,并在调试器中启动应用程序

  • 当调试器在第一个断点处停止时,在支持
    userData
    属性的变量上添加一个监视,方法是在“Variables”视图中右键单击(或控制单击)变量并选择“watch”(显然,此屏幕快照是另一段代码,但它说明了如何在Xcode中创建“watch”):

  • 通过单击“继续”按钮恢复执行:

  • 当你点击一个观察断点时,有时你会盯着汇编程序看,但你可以点击“跳出”按钮,直到你在代码中找到一个你能识别的点


这有助于确定是什么改变了变量(如果不是一个简单的
属性问题)。

这里是否涉及GCD?如果是,请提供代码。