传入的对象是prepare singleton吗?有什么区别?

Is the object passed in prepare a singelton ?What's the different?

我注意到在两个视图控制器之间传递的对象在这两个控制器中具有相同的地址。如果我更改控制器 B 中的值,控制器 A 中对象的值会自动更改。 这启发我考虑对象是单例。对于单例设计模式,优点是使用全局值来节省系统资源并保持 object.What 的一致性我在想对吗?有区别吗?

Singleton 设计模式确保对于给定的 class 只存在一个实例,并且有一个全局访问点可以访问该实例。它通常在第一次需要时使用延迟加载来创建单个实例。

Apple uses this approach a lot. For example: [NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager] all return a Singleton object.

有关单例设计模式的更多信息,请查看 Link

  1. 在两个视图控制器之间传递的对象可以是同一个对象,如果 你使用 strong property.It 也可以是两个不同的对象,如果 你用 copy 属性.
  2. 如果使用一个singleton.It将是一个相同的实例 class.When 使用单例,你应该小心管理生活 它的圈子。

关于设计。

当在 viewController 之间使用对象传递时,只有两个 viewController 可以访问该对象。

但是,当使用单例时,您的应用程序的每个地方都可以访问该实例。

Objective-C 或 swift 中,所有你称为 "Object" 的东西都是指向对象的指针。它不是 C++ 术语中的对象,它是 C++ 术语中的指针。

因为变量是指针,所以你用变量调用函数,复制的是指针而不是指向的对象

但是在Objective-C中存在一个C对象(结构体(例如CGSize)和简单变量(int,float ...)),如果您要使用它们来调用函数,这些变量将被复制。

关于属性:属性它是方法(设置和获取,如果属性不是只读的)。

如果属性有参数strong(保留):

@property (strong) NSObject* a 

那么属性可以像函数一样实现:

- (void)setA:(NSObject*)a
{
    _a  = a;//or [_a release]; _a = [a retain]; if no ARC
}

如果属性有参数copy:

@property (copy) NSObject* a 

那么属性可以像函数一样实现:

- (void)setA:(NSObject*)a
{
    _a  = [a copy];//or [_a release]; _a = [a copy]; if no ARC
}

属性是方法!

您可以创建任何对象的多个实例类:

NSObject* a = [[NSObject alloc] init];
NSObject* b = [[NSObject alloc] init];

a 和 b 指向 a memory 中不同对象的指针。

但是如果你不分配b对象:

NSObject* a = [[NSObject alloc] init];
NSObject* b = a;

a 和 b 指向内存中的一个对象。

关于单例:the singleton pattern is a design pattern that restricts the instantiation of a class to one object