关闭

单例对象与单例模式

170人阅读 评论(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
查看评论

单例模式与复制、赋值、析构

原文地址:http://www.cnblogs.com/loveis715/archive/2012/07/18/2598409.html“请写一个Singleton。”面试官微笑着和我说。  “这可真简单。”我心里想着,并在白板上写下了下面的Singleton实现:复制代码 1 class S...
  • u011344601
  • u011344601
  • 2016-03-07 11:15
  • 1121

单例模式和静态类的区别(Difference between static class and singleton pattern)

单例模式和静态类的区别(Difference between static class and singleton pattern)csdn就当自己的记事本了这个问题的答案引用Jon Skeet 回答 首先明确的是两个都是线程安全的,两者间最大的区别就是单例可以实现接口(Ps: 或者继承基类,虽然...
  • yyht800
  • yyht800
  • 2017-01-20 14:56
  • 1128

单例模式及销毁

通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。 单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类...
  • p2016
  • p2016
  • 2017-06-10 17:39
  • 516

java反射技术破坏单例模式

一、 Java中的反射技术可以获取类的所有方法、成员变量、还能访问private的构造方法,这样一来,单例模式中用的私有构造函数被调用就会产生多个实例,编写代码测试一下。 package test; import java.lang.reflect.Constructor; publi...
  • lws332969674
  • lws332969674
  • 2012-10-29 21:07
  • 9189

抵御反射创建单例模式的对象

《Effective Java》一书中第三条经验指出:“用私有构造器或者枚举类型强化Singleton”,其中先提出了两种单例模式。 1.暴露静态final字段 public class Elvis { public static final Elvis INSTANCE ...
  • u010595903
  • u010595903
  • 2016-06-04 19:22
  • 453

单例模式-确保对象的唯一性

设计模式学习与总结之单例模式一、单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,该类称为单例类,它提供全局访问方法。该类属于创建型模式。 在使用计算机时我们会经常看到这样的情况,当打开任务管理器时,无论我们打开多少次,却总是出现一个窗口。这是什么情况呢? 首先任务管理...
  • qq_26850187
  • qq_26850187
  • 2016-12-30 16:19
  • 676

单例模式与static的区别

单例模式与static的区别**1.static的对象一样可以被重定向啊,而单例除了static的引用外啊,最主要的是单例的构造器是private的啊,这样其他人都不可以new它了,不可以new这才是单例的核心思想所在吧。就是任何时候都只有一个,static虽然你可以随时使用,但是还是有被人new的...
  • AlphaGo_1
  • AlphaGo_1
  • 2016-07-02 11:07
  • 481

探索Scala(3)-- 单例对象

探索Scala语言单例对象
  • SpiderDog
  • SpiderDog
  • 2014-10-24 16:13
  • 2626

phalapi-进阶篇2(DI依赖注入和单例模式)

phalapi-进阶篇2(DI依赖注入和单例模式)前言先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.离上一次更新过去了快两周,在其中编写了一个关于DB分表分库解决大数据量的拓展,有兴趣的童鞋可以了解了解.废话不多说,本小节在于解释一下在PhalApi框架中...
  • u011142688
  • u011142688
  • 2015-11-07 21:51
  • 867

对象初始化过程与单例设计模式(饿汉式与懒汉式)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.对象初始化过程:(先加载类到内存,然后加载类属性,成员方法) 定义一个类Person,  在new Person("zhangsan",20); 初始化过程:...
  • u014665060
  • u014665060
  • 2014-12-03 21:09
  • 689
    个人资料
    • 访问:4999次
    • 积分:175
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:21篇
    • 译文:0篇
    • 评论:0条
    文章分类