关闭

单例对象与单例模式

134人阅读 评论(0) 收藏 举报
分类:
1. 单例。单:唯⼀性。例:实例对象。即使⽤某个类创建的对象是程序中唯⼀的实例对象。注:通常每次使⽤alloc创建的是不同的对象。

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

3. 注意:
操作单例对象的变量存储在静态区,程序关闭后由系统⾃动回收。
单例对象存储在堆区,不释放,程序关闭后由系统⾃动回收。
变量和单例对象的⽣命周期与程序同步。

4. 优势:
在内存中只有⼀个对象,节省内存空间。
避免频繁的创建销毁对象,可以提⾼性能。
避免对共享资源的多重占⽤。 可以全局访问。
降低模块之间的耦合度,降低代码的复杂度。

5. 单例模式:
单例模式是⼀种设计模式。 实现:定义⼀个单例类,保证程序中这个类只能创建唯⼀的实例对象,实现资源共享。

单例传值的小例子:
/*
   
 需求
   
 利用单例传值
   
 A界面的TextField输入的字符串传到B界面
   
 将内容作为B界面的标题
 

 */

[objc] view plain copy
  1. 1> 创建继承自NSObject的单例  
  2. @implementation MyHandle  
  3. #pragma mark - 创建一个单例  
  4. + (MyHandle *)shareHandle {  
  5.     // 定义一个静态区的变量 (利用其特性, 只初始化一次)  
  6.     static MyHandle *handle = nil;  
  7.      
  8.     if (handle == nil) {  
  9.         // 在程序结束的时候, 系统自动回收空间, 不用手动管理内存  
  10.         handle = [[MyHandle alloc] init];  
  11.     }  
  12.     return handle;  
  13. }  
  14.   
  15. - (void)dealloc {  
  16.     [_name release];  
  17.     [super dealloc];  
  18. }  
  19. @end  
  20.   
  21. @implementation RootViewController  
  22. #pragma mark - 创建View, 创建textfield, 讲textfield的值传给第二页面的title, 点击按钮跳到下一个界面  
  23. - (void)creatView { }  
  24.   
  25. #pragma mark - 点击继续按钮  
  26. - (void)actionButton:(UIButton *)button {  
  27.     // 取出TextField  
  28.     UITextField *textField = (UITextField *)[self.view viewWithTag:100];  
  29.      
  30.     // 创建单例对象, 并给属性进行赋值  
  31.     [MyHandle shareHandle].name = textField.text;  
  32.      
  33.     SecondViewController *secondVC = [[SecondViewController alloc] init];  
  34.     [self.navigationController pushViewController:secondVC animated:YES];  
  35.     [secondVC release];     
  36. }  
  37. @end  
  38.   
  39. @implementation SecondViewController  
  40. - (void)viewDidLoad {  
  41.     [super viewDidLoad];  
  42.      self.view.backgroundColor = [UIColor whiteColor];  
  43.     // Do any additional setup after loading the view.  
  44.      
  45.     // 取出单例对象, 作为标题  
  46.     self.navigationItem.title = [MyHandle shareHandle].name;  
  47. }  
  48. @end  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3193次
    • 积分:160
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:21篇
    • 译文:0篇
    • 评论:0条
    文章分类