单例只会对某个类实例化一次/单例类,对单例这个类实例化一次有且仅有一个对象
你单例初始化,只能初始化一次,然后你指向的对象,其实都是指向一个内存地址,也就是同一块内存,所以都是一样的/
so。。只能有一个对象,就是实例化的那个
(1)定义单例类singleton
- #import <Foundation/Foundation.h>
- @interface singleton : NSObject
- //@property (strong,nonatomic) UITextField *value;//最开始的时候把这个value定义为UITextField了,然后在init里面又没有初始化它,就取不到值。任何对象都要初始化它才能使用。
- @property (strong, nonatomic) NSString *value;
- //+(id)shareData:
- +(singleton *)shareData;
- @end
- #import "singleton.h"
- @implementation singleton
- static singleton *singletonData = nil;
- +(singleton *)shareData {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- singletonData = [[singleton alloc] init];
- });
- return singletonData;
- }
- -(id)init {
- if (self = [super init]) {
- // self.value = [[UITextField alloc]init];
- }
- return self;
- }
- @end
(2) ViewController
- #import <UIKit/UIKit.h>
- #import "OneViewController.h"
- #import "singleton.h"
- @interface ViewController : UIViewController
- @property (weak, nonatomic) IBOutlet UITextField *qqTextfield;
- - (IBAction)go:(id)sender;
- @end
- - (IBAction)go:(id)sender {
- //单例的使用
- singleton *oneS = [singleton shareData];
- // oneS.value.text = self.qqTextfield.text;
- oneS.value = self.qqTextfield.text;
- OneViewController *oneVC = [[OneViewController alloc]init];
- [self presentViewController:oneVC animated:YES completion:nil];
- }
(3) OneViewController
- #import <UIKit/UIKit.h>
- #import "singleton.h"
- @interface OneViewController : UIViewController
- @property (weak, nonatomic) IBOutlet UITextField *oneTextField;
- @end
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view from its nib.
- self.oneTextField.text = [singleton shareData].value;
- }
效果图:
从第一个view输入你的数据,点击go
----
在第二个view得到你输入的数据:
-----
源代码:点击打开链接
还可以看看:点击打开链接 IOS单例模式(Singleton)
共享这个类的实例变量,而非属性,属性是通过这个实例变量去获取的。
-----共享这个类的实例变量。。嗯啊。。ones这个对象。。。然后ones。value这个属性去拿到值