A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 楠瓜果 中级黑马   /  2014-7-20 23:33  /  1277 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例设计模式这个我好像之前在群里看到过

8 个回复

倒序浏览
设计模式好好看看,iPhone开发中有很多设计模式,也是一开始初学者不太容易弄明白的地方,有单例模式,MVC模式,代理模式,观察者模式。
回复 使用道具 举报
istream 发表于 2014-7-20 23:45
设计模式好好看看,iPhone开发中有很多设计模式,也是一开始初学者不太容易弄明白的地方,有单例模式,MVC ...

好的,谢谢我知道了
回复 使用道具 举报
应用场景: 当只需要某个类的唯一对象的使用使用单例模式。也就是保证这个类仅有一个实例,并且这个实例可以被全局访问。
实现代码
  1. //Singleton.h
  2. #import <Foundation/Foundation.h>

  3. @interface Singleton : NSObject
  4. @property NSString *singletonData;
  5. + (Singleton*)sharedManager;
  6. @end


  7. //Singleton.m
  8. #import "Singleton.h"

  9. @implementation Singleton

  10. static Singleton *sharedManager = nil;

  11. + (Singleton*)sharedManager
  12. {
  13.     static dispatch_once_t once;
  14.     dispatch_once(&once, ^{
  15.         sharedManager = [[self alloc] init];
  16.     });
  17.     return sharedManager;
  18. }

  19. @end
复制代码

说明:dispatch_once的作用是只执行一次代码块
^{sharedManager=[[self alloc] init];}
保证Singleton的实例只能被创建一次。

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
你的问题是什么?
回复 使用道具 举报
sharedManager=[[self alloc] init];
这里如果用 [[Singleton alloc]init],在下面重写alloc方法,alloc方法中会报野指针的错吗?我好像就报错了
换成另一种表达式就对了,谁能给我解释下
回复 使用道具 举报
我是一只小小强 发表于 2014-7-21 14:50
sharedManager=[[self alloc] init];
这里如果用 [[Singleton alloc]init],在下面重写alloc方法,alloc方法 ...

谢谢 你
回复 使用道具 举报
我是一只小小强 发表于 2014-7-21 14:50
sharedManager=[[self alloc] init];
这里如果用 [[Singleton alloc]init],在下面重写alloc方法,alloc方法 ...

alloc方法是对象方法,不是类方法,所以通过对象调用,不能通过类名来调用。alloc方法不需要重写,可以重写init方法。
回复 使用道具 举报
阳光地带 发表于 2014-7-21 23:32
alloc方法是对象方法,不是类方法,所以通过对象调用,不能通过类名来调用。alloc方法不需要重写,可以重 ...

上面的类对象我没注意到,单例模式是要实现使用任何方式都只能创建出一个对象,所有就要重写alloc、copy、retain所有能添加对象的方法,创建如果存在就返回已经存在的对象,init是初始化对象内变量的对象方法而已,对了,还要重写release才能保证已创建的对象的计数器不会减少,避免对象消失,这才是单例模式的要求哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马