【问题标题】:Objective C - object allocating good practiceObjective C - 对象分配良好实践
【发布时间】:2015-04-01 08:54:04
【问题描述】:

我正在尝试使用 Objective-C 构建 MVC 应用程序,我正在尝试在我的超类中分配和初始化我的模型一次,女巫是 UIViewController,我的想法是在超类中执行一次并从每个子类中访问我的超类。

superclass.h

@property (nonatomic, strong) Lecturer *lecturer;

superclass.m

 - (void) viewDidLoad {
   [super viewDidLoad];
 }

#pragma mark - GET

 - (Lecturer *)lecturer {
   if (!_lecturer) {
   _lecturer = [Lecturer alloc]init];
   }
   return _lecturer;
}

我的想法是从所有子类中调用 self.lecturer 并设置/获取讲师类属性,但每次我调用 self.lecturer 时,它都会创建一个新实例,我知道我可以使用 SINGLETONE但是如果没有单调设计模式,我有什么办法可以做到不同吗?

感谢关注。

【问题讨论】:

  • 如果您不想使用单例依赖注入,可以通过将讲座的第一个实例传递给其他视图控制器来解决问题。 objc.io/issue-13/singletons.html

标签: ios objective-c model-view-controller superclass


【解决方案1】:

使用static变量怎么样?

- (Lecturer *)lecturer {
    static dispatch_once_t onceToken;
    static Lecturer *o;
    dispatch_once(&onceToken, ^{
        o = [[Lecturer alloc] init];
    });
    return o;
}

此外,dispatch_once 有助于线程安全地执行此操作。

【讨论】:

  • 是的,这行得通,但单音仍然做同样的工作,谢谢你的回答。
  • 对不起,我没有正确理解你的意思。根据我的经验,避免单例模式在 iOS 应用程序开发中有点麻烦。一般来说,要共享模型对象,您可以使用单例模式或简单地将这些传递并传播到使用端对象(视图和控制器)。但是 iOS SDK 的特殊功能,例如故事板,以自服务的方式实例化控制器类。因此,您必须学习如何将模型对象传递给每种情况的视图控制器。
  • 好吧,如果我找到了解决方案,我会发布它:)
猜你喜欢
  • 2021-10-31
  • 2015-12-06
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2011-02-05
  • 2018-12-28
相关资源
最近更新 更多