1. 单例。单:唯⼀性。例:实例对象。即使⽤某个类创建的对象是程序中唯⼀的实例对象。注:通常每次使⽤alloc创建的是不同的对象。
2. 如果⼀个类只能创建⼀个对象,称为单例类。单例类可以是⼯具类, 视图类,控制器类。
3. 注意:
操作单例对象的变量存储在静态区,程序关闭后由系统⾃动回收。
单例对象存储在堆区,不释放,程序关闭后由系统⾃动回收。
变量和单例对象的⽣命周期与程序同步。
4. 优势:
在内存中只有⼀个对象,节省内存空间。
避免频繁的创建销毁对象,可以提⾼性能。
避免对共享资源的多重占⽤。 可以全局访问。
降低模块之间的耦合度,降低代码的复杂度。
5. 单例模式:
单例模式是⼀种设计模式。 实现:定义⼀个单例类,保证程序中这个类只能创建唯⼀的实例对象,实现资源共享。
单例传值的小例子:
/*
需求
利用单例传值
把 A 界面的 TextField 输入的字符串传到 B 界面
将内容作为 B 界面的标题
需求
利用单例传值
把 A 界面的 TextField 输入的字符串传到 B 界面
将内容作为 B 界面的标题
*/
1> 创建继承自NSObject的单例
@implementation MyHandle
#pragma mark - 创建一个单例
+ (MyHandle *)shareHandle {
// 定义一个静态区的变量 (利用其特性, 只初始化一次)
static MyHandle *handle = nil;
if (handle == nil) {
// 在程序结束的时候, 系统自动回收空间, 不用手动管理内存
handle = [[MyHandle alloc] init];
}
return handle;
}
- (void)dealloc {
[_name release];
[super dealloc];
}
@end
@implementation RootViewController
#pragma mark - 创建View, 创建textfield, 讲textfield的值传给第二页面的title, 点击按钮跳到下一个界面
- (void)creatView { }
#pragma mark - 点击继续按钮
- (void)actionButton:(UIButton *)button {
// 取出TextField
UITextField *textField = (UITextField *)[self.view viewWithTag:100];
// 创建单例对象, 并给属性进行赋值
[MyHandle shareHandle].name = textField.text;
SecondViewController *secondVC = [[SecondViewController alloc] init];
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
}
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
// Do any additional setup after loading the view.
// 取出单例对象, 作为标题
self.navigationItem.title = [MyHandle shareHandle].name;
}
@end