• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 假设静态变量永远不会被清除是否安全?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 07:57:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我曾有用户报告某个应用程序发生随机崩溃,尤其是在其他应用程序之间切换时。不幸的是,我暂时无法复制崩溃或获取崩溃日志。在我的 iOS 应用程序中,我有一个静态类,用于存储我在整个应用程序中引用的变量 - 我有一种预感,这就是导致问题的原因:

namespace DemoApp.BusinessLogic
{
    public static class AppController
    {
        public static string WebServiceURL { get; set; }
        public static int UserId { get; set; }
        public static User User { get; set; }
        //...
    }
}  

这些值在用户首次登录应用程序时启动。我的理解是 ARC 永远不会清除静态引用,这是正确的吗?我可以安全地假设这些值在应用程序关闭之前永远不会被清除吗?

我可以将这些静态值替换为对 NSUserDefaults 的引用:

namespace DemoApp.BusinessLogic
{
    public static class AppController
    {
        public static string WebServiceURL { 
            get { 
                return NSUserDefaults.StandardUserDefaults.StringForKey("WebServiceURL"); 
            } 
            set { 
                NSUserDefaults.StandardUserDefaults.SetString(value, "WebServiceURL"); 
            }
        }

        public static string UserId { 
            get { 
                return NSUserDefaults.StandardUserDefaults.StringForKey("UserId"); 
            } 
            set { 
                NSUserDefaults.StandardUserDefaults.SetString(value, "UserId"); 
            }
        }

        //...
    }
}  

这是一种更好的做事方式吗?



Best Answer-推荐答案


My understanding was that static references are never cleared by ARC, is this correct?

是的,这是正确的。 ARC 不会清除您的静态变量,除非它们是 weak 并且它们引用的对象没有其他引用。

I could replace these static values to references to NSUserDefaults. Is this a better way of doing things?

这种比较不是苹果对苹果,因为 NSUserDefaults 中的值将在关闭应用程序甚至关闭设备电源后仍然存在,而 static 将具有在启动时进行初始化。如果希望在不同的运行中持久保存 WebServiceURLUserId,那么 NSUserDefaults 是一个好方法;否则,static 就足够了。

关于ios - 假设静态变量永远不会被清除是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732630/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap