热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS:使用app委托来容纳全局变量-iOS:Usingtheappdelegatetohouseglobalvariables

IsitbadpractisetohousevariablesthatIwanttobeaccessiblefromallclassesintheappdeleg

Is it bad practise to house variables that I want to be accessible from all classes in the app delegate and get them via [[UIApplication sharedApplication] delegate] someProperty]

容纳我想要从app委托中的所有类访问的变量并通过[[UIApplication sharedApplication]委托] someProperty获取它们是不好的做法

2 个解决方案

#1


7  

The real solution to your question isn't to replace one form of global state with another (i.e. singletons).

你问题的真正解决方案不是将一种形式的全球状态替换为另一种形式(即单身人士)。

What you should be doing is putting state within "model" classes that are instantiated inside your app delegate, and then passing them down to the parts of your application that need them (e.g. view controllers), thereby eliminating your global state problem entirely.

您应该做的是将状态放在应用程序委托中实例化的“模型”类中,然后将它们传递给需要它们的应用程序部分(例如视图控制器),从而完全消除您的全局状态问题。

#2


3  

Its generally not a good practice to load up your AppDelegate as a container for app-wide variables in this way. It can quickly get unwieldy.

以这种方式将AppDelegate作为应用程序范围变量的容器加载通常不是一个好习惯。它很快就会变得笨拙。

A common practice is to define some singleton objects, as follows:

通常的做法是定义一些单例对象,如下所示:

+ (instancetype)shared
{
    static dispatch_once_t onceToken;
    static MyServiceClient* instance;

    dispatch_once(&onceToken, ^  //Use GCD to make a singleton with thread-safety
    {
        instance = [[self alloc] init];
    });
    return instance;
}

You can then provide these objects as parameters to your classes that require them as collaborators.

然后,您可以将这些对象作为参数提供给需要它们作为协作者的类。

Use Dependency Injection

使用依赖注入

Note though that singleton can be considered an anti-pattern. If you inject these singletons into classes that require them its not too bad, however it's definitely not recommend to hard-wire them (unfortunately, also a common practice), as this promotes too-tight coupling, cohesion and requires complicated swizzling in order perform unit tests.

请注意,单例可以被视为反模式。如果你将这些单体注入需要它们的类别并不太糟糕,但绝对不建议硬连线(不幸的是,这也是一种常见的做法),因为这会促进过于紧密的耦合,凝聚力并需要复杂的调配才能执行单元测试。

Another approach is to use dependency injection, in which case the objects need not even be singletons, in most cases. You can instantiate an object-graph of collaborating components for a given use-case that will come and go as needed. This has the benefit of using less memory on resource constrained devices.

另一种方法是使用依赖注入,在这种情况下,在大多数情况下,对象甚至不需要是单例。您可以根据需要实例化给定用例的协作组件的对象图。这样做的好处是可以在资源受限的设备上使用更少的内存。

Its a common misconception that you need a library to use dependency injection. You don't. It can help though. I created a dependency injection container called Typhoon.

它是一个常见的误解,你需要一个库来使用依赖注入。你没有。它可以帮助。我创建了一个名为Typhoon的依赖注入容器。

Notifications

Another way of achieving loose collaboration between classes is to use notifications.

在类之间实现松散协作的另一种方法是使用通知。


推荐阅读
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 本文介绍了如何使用 Gesture Detector 和 overridePendingTransition 方法来实现滑动界面和过渡动画。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
  • iOS开发中MVC架构模式的深入解析(第一部分)
    在iOS开发中,MVC架构模式是常用的设计模式之一。本文将深入解析MVC架构的第一部分,重点介绍View组件。View组件继承自UIView,主要负责内容的展示(如UILabel等视图类)和用户输入的处理(如UIButton等控件类)。通过详细的代码示例和实际应用,帮助开发者更好地理解和掌握View在MVC架构中的作用和实现方式。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 在移动端开发中,多点触控手势是提升用户体验的重要手段。然而,目前只有iOS浏览器原生支持手势事件,其他设备需要通过touchstart、touchmove和touchend等基础事件进行自定义实现。本文将详细介绍如何在Vue项目中实现多点触控手势。 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 在 `UITableViewController` 中采用简洁的平面样式布局时,可以通过优化代码实现单元格扩展至屏幕边缘的效果,同时确保节标题以分组样式呈现,从而提升用户体验和界面美观度。通过这种方式,可以更好地组织和展示列表内容,使其更加清晰和有序。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 在本文中,我们探讨了如何使用 NSArrays 来实现集合的交集与并集操作。通过两个示例数组 A 和 B,其中包含一些共同元素(例如 A: 1, 2, 3 和 B: 2, 3, 4),我们将详细介绍如何高效地进行这些集合操作。此外,我们还将讨论这些方法在实际应用中的性能优势和适用场景。 ... [详细]
author-avatar
乌龟北京飘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有