【问题标题】:Setting AppDelegate Shared instance to nil does not create warning or crash将 AppDelegate Shared 实例设置为 nil 不会产生警告或崩溃
【发布时间】:2013-06-13 10:30:42
【问题描述】:

在我的应用程序中,我做了这样的事情,

AppDelegate *appDelegate = [[UIApplication sharedApplication] 委托]; //一些代码 appDelegate = nil;

但是,App 运行良好,没有给出警告或崩溃。

谁能解释一下? 谢谢。

【问题讨论】:

    标签: ios uiapplicationdelegate


    【解决方案1】:

    您将appDelegate 指针设置为nil 而不是应用程序的委托。编写此代码后,[[UIApplication sharedApplication] delegate] 仍然不是nil

    【讨论】:

      【解决方案2】:

      首先你让appDelegate 指向[[UIApplication sharedApplication] delegate]。然后你让它指向无处。但是[[UIApplication sharedApplication] delegate] 保持不变。你什么也没做。你甚至没有碰它。

      你可能想到的是:

       [[UIApplication sharedApplication] setDelegate:nil];
      

      但它也不应该产生警告或崩溃。它只会导致不调用应用程序委托方法,因为发送给 nil 的消息什么都不做。

      【讨论】:

        【解决方案3】:

        [[UIApplication sharedApplication] delegate] 会给你一个指向你的应用程序委托的指针,它是在你创建项目时自动创建的。所以设置 appDelegate = nil,只是将指向应用程序委托的指针设置为 nil。对自动创建的应用委托不做任何事情..

        【讨论】:

          【解决方案4】:
           AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
          

          使用这一行,它会返回一个 appDelegate 的共享实例。

          [UIApplication sharedApplication] --- 允许访问单例

          delegate 方法返回一个指向应用委托的指针。 当您在完成所有工作后将 nil 分配给 appDelegate 时。为什么会崩溃? 如果您在分配 nil 值后尝试调用方法,则可能是这样。那是行不通的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-09
            • 2020-08-09
            • 1970-01-01
            • 2013-02-20
            • 1970-01-01
            • 2011-01-16
            • 2012-03-19
            相关资源
            最近更新 更多