33.单例对象

来源:互联网 发布:大数据产品市场份额 编辑:程序博客网 时间:2024/04/29 23:56

单例。单:唯⼀性。例:实例对象。即使⽤某个类创建的对象是程序中唯⼀的实例对象。注:通常每次使⽤alloc创建的是不同的对象。

如果⼀个类只能创建⼀个对象,称为单例类。单例类可以是⼯具类,视图类,控制器类。

练习

在上⼀个练习的基础上,通过单例实现:将RootVC输⼊的字符串,

显⽰在secondVC的导航栏上。

在RootVC的根视图上,设置输⼊框。

定义单例类Mysington,定义NSString类型的属性str。

=================================

1.定义单例类Mysington,定义NSString类型的属性str。

在Mysington.h文件中

@interface Mysington : NSObject

@property (nonatomic,retain)NSString *str;

+ (Mysington *)shareHandle;

在Mysington.m文件中

/*

单例类:从程序开始运行 到程序结束 就只有一个对象 并且不用手动释放 ,随程序结束会自动释放

单例的应用:

1.单例传值(利用了程序运行期间就一个对象的特点)

2.可以封装操作类(数据操作)

*/

+ (Mysington *)shareHandle

{

定义了一个静态区的指针

static Mysington *handle = nil;

如果指针指向空的话

if (handle == nil) {

再堆区开辟一块空间(创建对象)

handle = [[Mysington alloc] init];

}

面试问题

为什么不去自动释放单例对象

如果选用自动释放的 再程序的运行期间可能会遇到系统未知的释放池 从而被释放 这样会出现内存问题

return handle;

}

在RootVC.m中实现点击跳转和传值

创建了一个UITextfield和UIButton

- (void)button:(UIButton *)button

{

获取传的值

UITextField field = (UITextField )[self.view viewWithTag:10];

单例对象

Mysington *sington = [Mysington shareHandle];

赋值单例对象的属性(传值使用)

sington.str = field.text;

SecondViewController *secondVC = [[SecondViewController alloc] init];

[self.navigationController pushViewController:secondVC animated:YES];

}

在SecondVC.m中

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

获取单例对象

Mysington *sington = [Mysington shareHandle];

self.navigationItem.title = sington.str;

}

0 0