需要iOS应用程序中的帮助';中国的建筑。是否使用单例?

需要iOS应用程序中的帮助';中国的建筑。是否使用单例?,ios,Ios,我有一个类ServiceClass,这个类中有一个闭包函数,例如LoginViaEmail,调用apilyerAPILayer调用HttpLayer和JSONHandler并将输出返回到ServiceClassServiceClass进一步向ViewController返回一些信息 我的问题是 我是否要将ServiceClass设置为Singleton?但是每个人都说他们是反模式的,而不是一个 如果它们如此糟糕,为什么要使用它们?例如NSFileManager、NSWorkspace、UIApp

我有一个类
ServiceClass
,这个类中有一个闭包函数,例如
LoginViaEmail
,调用
apilyer
APILayer
调用
HttpLayer
JSONHandler
并将输出返回到
ServiceClass
<当接收到
completionblock
时,code>ServiceClass进一步向
ViewController
返回一些信息

我的问题是

  • 我是否要将
    ServiceClass
    设置为Singleton?但是每个人都说他们是反模式的,而不是一个
  • 如果它们如此糟糕,为什么要使用它们?例如NSFileManager、NSWorkspace、UIApplication等
  • 如果不是Singleton,那么我应该使用什么?每次我使用它时,都要创建
    ServiceClass
    的实例吗?这不会占用太多的内存吗

  • 如果您的ServiceClass内部不需要某种状态,我会在内部使用
    class func
    并这样调用它:

    ServiceClass.fetchSomething { fetchedData in
         self.updateUI(with: fetchedData)
    }
    

    如果您的ServiceClass内部不需要某种状态,我会在内部使用
    class func
    并这样调用它:

    ServiceClass.fetchSomething { fetchedData in
         self.updateUI(with: fetchedData)
    }
    

    您可以为此使用singleton类,但如果您这样做,那么您还应该管理任何类似于网络处理程序队列的功能

    因为网络请求应该是异步的,并且支持并发

    在应用程序中的任何时间点,您可能需要一次执行多个请求

    使用单例模式,该任务将稍微复杂一些,并且需要更多地管理多个请求

    所以,如果这不是一个问题,那么您可以轻松地使用单例模式

    否则,您可以创建NSObject的类别。此类别将启动请求并将其发送给其他请求处理、解析类,然后回调响应给发送方

    使用NSObject的类别,您将受益于可以从任何类(作为任何其他帮助器类的模型、控制器)发起请求

    例如,正如我所使用的:

    self.startPostRequest(withInput: payload,
                                      requestApi: kApiScheduleList,
                                      httpMethod: kHttpMethodPost,
                                      headerDict: nil,
                                      success: { (response) in
    
                }, failure: { (error) in
    
                })
    
    希望这会有所帮助


    如果您需要讨论任何问题,请告诉我。

    您可以使用singleton类进行讨论,但如果您这样做,则还应该管理任何类似网络处理程序队列的功能

    因为网络请求应该是异步的,并且支持并发

    在应用程序中的任何时间点,您可能需要一次执行多个请求

    使用单例模式,该任务将稍微复杂一些,并且需要更多地管理多个请求

    所以,如果这不是一个问题,那么您可以轻松地使用单例模式

    否则,您可以创建NSObject的类别。此类别将启动请求并将其发送给其他请求处理、解析类,然后回调响应给发送方

    使用NSObject的类别,您将受益于可以从任何类(作为任何其他帮助器类的模型、控制器)发起请求

    例如,正如我所使用的:

    self.startPostRequest(withInput: payload,
                                      requestApi: kApiScheduleList,
                                      httpMethod: kHttpMethodPost,
                                      headerDict: nil,
                                      success: { (response) in
    
                }, failure: { (error) in
    
                })
    
    希望这会有所帮助


    如果您需要讨论任何一点,请告诉我。

    如果您想编写有效、独立和不耦合的测试,请不要使用一堆单例。如果您不关心测试,那么单例就可以了

    这是我使用的中间屋结构:

  • 拥有一个总体应用程序或容器类,该类拥有所有服务,并创建它们,并根据需要将它们相互注入(因此您的服务将所有依赖项作为属性,并且不访问任何静态)

  • 让UIAppDelegate类拥有容器的单个实例。这是应用程序中唯一的“单身”

  • UIViewController等在viewDidLoad时通过UIAppDelegate获取对容器及其服务的引用,并将它们保存到本地属性中。他们自己注射。这将是很好的,使之自动化

  • 测试可以根据需要设置和拆除容器或单个服务,知道其他测试不会影响它们


  • 如果您想编写有效、独立且不耦合的测试,请不要使用一堆单例。如果您不关心测试,那么单例就可以了

    这是我使用的中间屋结构:

  • 拥有一个总体应用程序或容器类,该类拥有所有服务,并创建它们,并根据需要将它们相互注入(因此您的服务将所有依赖项作为属性,并且不访问任何静态)

  • 让UIAppDelegate类拥有容器的单个实例。这是应用程序中唯一的“单身”

  • UIViewController等在viewDidLoad时通过UIAppDelegate获取对容器及其服务的引用,并将它们保存到本地属性中。他们自己注射。这将是很好的,使之自动化

  • 测试可以根据需要设置和拆除容器或单个服务,知道其他测试不会影响它们


  • 请访问下面的链接,Singleton类是不错的选项,因为它易于实现和访问。您可以跟随请访问下面的链接,Singleton类是不错的选项,因为它易于实现和访问。您可以跟随