相关栏目: IT资讯 当前位置:主页 > IT资讯 >

iOS常用设计模式——单例模式,ios设计模式

发布时间:2019-02-06 作者:918Õ 分类:IT资讯

iOS常用设计模式——单例模式,ios设计模式
第一部分: 创建一个单例对象  

单例的应用场景:

单例模式用于当一个类只能有一个实例的时候, 通常情况下这个“单例”代表的是某一个物理设备比如打印机,或是某种不可以有多个实例同时存在的虚拟资源或是系统属性比如一个程序的某个引擎或是数据。用单例模式加以控制是非常有必要的。

什么是单例模式?

单例是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

 

单例设计模式需要达到下面几个目的:1.)封装一个共享的资源; 2.)提供一个固定的实例创建方法; 3.)提供一个标准的实例访问接口

 

常用的定义单例的方法(ARC+GCAAAAAAAAA> 

//实现一个创建单例对象的类方法

static ClassType *objName = nil; 

+ (ClassType *) sharedInstance{
static dispatch_once_t oneToken = 0;
dispatch_once(&onceToken, ^{
objName = [[super allocWithZone: NULL] init];
});
return objName; 
}

//重写几个方法,防止创建单例对象时出现错误
-(id) init{
If(self = [super init])
{
//初始化单例对象的各种属性
}
return self;
}

+(id)allocWithZone: (struct _NSZone *) zone{
return [self sharedInstance];
}

//这是单例对象遵循<NSCopying>协议时需要实现的方法
-(id) copyWithZone: (struct _NSZone *)zone{
return self;
}
第二部分:就地取材使用UIApplication单例

直接在AppDelegate中创建实例变量,然后在项目的其他文件中使用这些变量。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shareApplication] delegate];
appDelegate.a = 10086;
appDelegate.globalString = @”中国想联通’;

 

这样,你可以定义一个全局实例变量。

详细请参考:http://blog.csdn.net/casablaneca/article/details/21074413

第三部分:在项目中使用单例设计模式

项目描述:我们希望通过一个button的点击事件触发单例对象中的一个属性值发生变化,然后使用KVO在ViewController的两个子视图(LeftView, RightView)上监听这个属性值得变化,并将变化后的数值在LeftView和RightView上显示出来。

 

1.) 在ViewController上设置一个button和一个触发事件

-(IBAction) refreshData: (id) sender{
//stockForKVO为单例对象
stockForKVO.price = arc4random()%100;
}

2.) 在LefeView和RightVIew的对象中使用KVO监听单例对象中属性值的变化

 stockForKVO = [StockData sharedInstance];
    [stockForKVO addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];

//实现回调方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if ([keyPath isEqualToString:@"price"]) {
        showLabel.text = [NSString stringWithFormat:@"%f",stockForKVO.price];
        NSLog(@" left change: %@", change);
    }
}

3.)实现后的效果如图2所示

 

 

图2: 右边为button事件触发后的场景,左边为初始化时的场景

 

项目的源码下载地址: http://download.csdn.net/detail/luozhonglan/8005001


 

 

 

 

 

 

 


 

 

 

 

 


开发中怎使用单例 ios

为你解答。

第一、基本概念
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问。
第二、在IOS中使用单例模式的情况
1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间
2.在IOS开发中,如果很多模块都要使用同一个变量,此时如果把该变量放入单例类,则所有访问该变量的调用变得很容易,否则,只能通过一个模块传递给另外一个模块,这样增加了风险和复杂度
第三、创建单例模式的基本步骤
1.声明一个单例对象的静态实例,并初始化为nil
2.声明一个类的工厂方法,生成一个该类的实例,并且只会生成一个
3.覆盖allcoWithZone方法,确保用户在alloc 时,不会产生一个多余的对象
4.实现NSCopying协议,覆盖release,autorelease,retain,retainCount方法,以确保只有一个实例化对象
5.在多线程的环境中,注意使用@synchronized关键字

[cpp] view plaincopyprint?
//
// UserContext.h
// SingleDemo
//
// Created by andyyang on 9/30/13.
// Copyright (c) 2013 andyyang. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface UserContext : NSObject
@property (nonatomic,retain) NSString *username;
@property(nonatomic,retain)NSString *email;
+(id)sharedUserDefault;
@end

[cpp] view plaincopyprint?
//
// UserContext.m
// SingleDemo
//
// Created by andyyang on 9/30/13.
// Copyright (c) 2013 andyyang. All rights reserved.
//

#import "UserContext.h"

static UserContext *singleInstance=nil;
@implementation UserContext

+(id)sharedUserDefault
{
if(singleInstance==nil)
{
@synchronized(self)
{
if(singleInstance==nil)
{
singleInstance=[[[self class] alloc......余下全文>>
 
IOS 单例模式怎使用?

所有编程语言的单例模式都大同小异。Object-c, Java, C++等,跟语言没有太大关系,只跟语法有点关系而己。

在IOS 中假如你有一个类:AccountManager,你要定义单例则步法如下:

一. 在.h文件中应该有类似如下定义:
+ (id) sharedInstance;

二. 在.m文件内类应该有如下定义:

//声明一个全局唯一的静态对象,也是AccountManager类型
static AccountManager * _sharedInstance;
//方法实现
+ (id) sharedInstance {
@synchronized ([AccountManagerclass]) {
if (_sharedInstance == nil) {
_sharedInstance = [[AccountManageralloc] init];
}
}
return_sharedInstance;
}

三. 你在别的类对象中如果要使用该单例,并调用该单例的某方法(todoSomething)为:
[[AccountManager sharedInstance] todoSomething ];

附加说明:
1。 sharedInstance这个名字是我习惯用的,你可以用别的名字,任意,总之就是保持AccountManager这个类在整个应用程序运行期间只能有一个实例
2。 这里的例子给你实现的是“懒汉式” 单例, 还有另外的单例方式也可以完成任务,如“饿汉式”单例。 如果你不清楚什么是懒汉和饿汉你可以再Google上查到
 

http://www.bkjia.com/Androidjc/889379.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/889379.htmlTechArticleiOS常用设计模式——单例模式,ios设计模式 第一部分: 创建一个单例对象 单例的应用场景: 单例模式用于当一个类只能有一个实例的时候...

本文源自: 凯发国际

上一篇:android项目 之 来电管家(5) ----- 添加监听服务 下一篇:没有了

Copyright © 2005-2016 http://www.owlpma.com 凯发国际_凯发国际开户礼金_凯发注册送_新浪娱乐版权所有 凯发国际_凯发国际开户礼金_凯发注册送_新浪娱乐