33.单例对象

单例。单:唯⼀性。例:实例对象。即使⽤某个类创建的对象是程序中唯⼀的实例对象。注:通常每次使⽤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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值