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