单例模式浅析 - ios
2015-09-24 11:57
531 查看
单例模式在平时编程时用的很普遍,也很方便,它的设计原理是始终返回一个实例,即一个类始终只有一个实例,这样可以避免一个类多次创建实例,从而提高代码重用性。它是在代码间共享数据而不需要手动传递参数的一种最有用的方法。下面将通过一个简单的demo来具体体现单例的强大,走起~
首先创建一个继承自NSObject的类。命名为Single
Single.h代码如下:
#import <Foundation/Foundation.h>
@interface Single::NSObject
@property (nonatomic, retain) NSString *singleValue;
+ (id)sharedManager;
- (NSString *)getSingleValue;
- (void)print;
@end
Single.m代码如下:(***这里强调一下,.m里的方法要在.h里面声明才能在其他类里面调用呦,我写的时候怎么都调用不成功就是因为忘了声明!!!)
#import "Single.h"
static Singleton *single;
@implementation Single
@synthesize singleValue;
//将单例实现
+ (id)sharedManager
{
@synchronized(self)
{
if (singlet == nil) {
single = [[self alloc]init];
}
}
return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
@synchronized(self){
if (!single) {
single = [super allocWithZone:zone];
return single;
}
}
return nil;
}
- (id)copy
{
return self;
}
- (id)init
{
if (self = [super init]) {
singleValue = @"123";
}
return self;
}
- (NSString *)getSingleValue
{
return singleValue;
}
- (void)print
{
NSLog(@"123");
}
@end
ViewController.m代码如下:(.h文件里没有改动,所以代码略过,直接.m具体实现。为了数值显示方便,我在这个文件里添加了一个Label,用于显示效果。我用的是xib方式添加的,大家可以自己选择手写代码或者用xib创建,(*^__^*) 嘻嘻……)
#import "ViewController.h"
#import "Single.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *valueLabel;
@end
@implementation ViewController
@synthesize valueLabel;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
valueLabel.text = [[Single sharedManager]getSingleValue];//对对对,调用就是这么简单,添加完头文件直接调用!!!
[b][[SinglesharedManager]
print];//调用方法喽[/b]
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
对,你没有看错,一个单例的例子就完成啦!!!有木有感觉很好用,棒棒哒!
首先创建一个继承自NSObject的类。命名为Single
Single.h代码如下:
#import <Foundation/Foundation.h>
@interface Single::NSObject
@property (nonatomic, retain) NSString *singleValue;
+ (id)sharedManager;
- (NSString *)getSingleValue;
- (void)print;
@end
Single.m代码如下:(***这里强调一下,.m里的方法要在.h里面声明才能在其他类里面调用呦,我写的时候怎么都调用不成功就是因为忘了声明!!!)
#import "Single.h"
static Singleton *single;
@implementation Single
@synthesize singleValue;
//将单例实现
+ (id)sharedManager
{
@synchronized(self)
{
if (singlet == nil) {
single = [[self alloc]init];
}
}
return single;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
@synchronized(self){
if (!single) {
single = [super allocWithZone:zone];
return single;
}
}
return nil;
}
- (id)copy
{
return self;
}
- (id)init
{
if (self = [super init]) {
singleValue = @"123";
}
return self;
}
- (NSString *)getSingleValue
{
return singleValue;
}
- (void)print
{
NSLog(@"123");
}
@end
ViewController.m代码如下:(.h文件里没有改动,所以代码略过,直接.m具体实现。为了数值显示方便,我在这个文件里添加了一个Label,用于显示效果。我用的是xib方式添加的,大家可以自己选择手写代码或者用xib创建,(*^__^*) 嘻嘻……)
#import "ViewController.h"
#import "Single.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *valueLabel;
@end
@implementation ViewController
@synthesize valueLabel;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
valueLabel.text = [[Single sharedManager]getSingleValue];//对对对,调用就是这么简单,添加完头文件直接调用!!!
[b][[SinglesharedManager]
print];//调用方法喽[/b]
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
对,你没有看错,一个单例的例子就完成啦!!!有木有感觉很好用,棒棒哒!
相关文章推荐
- ios9下ionic框架报[$rootScope:infdig] 10 $digest() iterations reached. Aborting!的解决办法
- IOS视图生命周期与视图控制器关系
- iOS控件TextView添加placeholder属性的两种方法
- ios- 归档 解档
- iOS 根据字体设置size
- ios 归档接档
- iOS 系统自带定位
- iOS开发——多线程
- iOS多线程学习---NSOperation
- iOS 开发 屏幕尺寸 --------开发者必备
- iOS tintColor与backgroundColor
- iOS详细讲解沙盒机制
- [ZZ]研究所工作,想转iOS开发,求指点
- IOS中NSTimeZone小结
- iOS---XCode7 + IOS9 问题及解决方案
- IOS绘制渐变背景色折线图的一种尝试
- ios9 总结
- IOS 自定义字体
- iOS 代码实践总结
- ios 经典错误