IOS开发指南读书笔记5(IOS 常用设计模式)
2015-11-18 11:36
399 查看
IOS开发指南读书笔记5(IOS 常用设计模式)
1、单例模式
构造方法
@interface Singleton : NSObject
+(Singleton*)sharedInstance;
@property(nonatomic,strong) NSString* singletonData;
@end
@implementation Singleton
@synthesize singletonData = _singletonData;
static Singleton* sharedInstance = nil;
+(Singleton*)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc]init];
});
return sharedInstance;
}
@end
应用案例
UIApplication,UIAccelerometer,NSUserDefaults,NSNotificationCenter,NSFileManager,NSBundle
2、委托模式
构建方法
//委托协议
@protocol Delegate <NSObject>
//执行完毕
-(void)exeFinish;
@end
//通用类
@interface CustomClass : NSObject
//委托对象
@property(nonatomic,assign) id<Delegate>
delegate;
-(void)doSomething;
@end
@implementation CustomClass
@synthesize delegate = _delegate;
-(void)doSomething
{
//do something
NSLog(@"通知委托对象事情做完了");
if (self.delegate && [self.delegate respondsToSelector:@selector(exeFinish)])
{
[self.delegate exeFinish];
}
}
@end
//委托实现类
@interface DelegateImplements : NSObject <Delegate>
@end
@implementation DelegateImplements
-(void)exeFinish
{
NSLog(@"执行完毕");
}
@end
//创建对象
CustomClass* instance = [[CustomClass alloc]init];
DelegateImplements* delegate = [[DelegateImplements alloc]init];
instance.delegate = delegate;
应用案例
UITextFieldDelegate,UITableViewDelegate,UIActionSheetDelegate等。
3、观察者模式
//抽象观察者
@protocol Observer<NSObject>
@required
-(void)update;
@end
//抽象主题
@protocol Subject<NSObject>
-(void)addObserver:(id<Observer>)observer;
-(void)removeObserver:(id<Observer>)observer;
@end
//真正观察者
@interface TrueObserver : NSObject<Observer>
@end
@implementation TrueObserver
-(void)update
{
NSLog(@"刷新");
}
@end
//真正主题
@interface TrueSubject : NSObject<Subject>
{
//观察者数组
NSMutableArray* observers;
}
@property(nonatomic,strong) NSMutableArray*
observers;
+(TrueSubject*)sharedSubject;
@end
@implementation TrueSubject
@synthesize observers;
static TrueSubject* instance = nil;
+(TrueSubject*)sharedSubject
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc]init];
instance.observers = [NSMutableArray array];
});
return instance;
}
-(void)addObserver:(id<Observer>)observer
{
[self.observers addObject:observers];
}
-(void)removeObserver:(id<Observer>)observer
{
[self.observers removeObject:observers];
}
//通知所有对象
-(void)notifyAllOberser
{
for (id observer in self.observers)
{
[observer update];
}
}
@end
实际案例NSNotificationCenter
KVO机制
//KVO主题
@interface KVOSubject : NSObject
//观察属性
@property(nonatomic,copy) NSString* observerProperty;
@end
//KVO观察者
@interface KVOObserver : NSObject
@end
@implementation KVOSubject
@synthesize observerProperty;
-(id)init
{
self = [super init];
if (self)
{
KVOObserver* observer = [[KVOObserver alloc]init];
[self addObserver:observer forKeyPath:@"observerProperty" options:NSKeyValueObservingOptionNew context:@"Pass
Context"];
self.observerProperty = @"呵呵";
self.observerProperty = @"嘻嘻";
self.observerProperty = @"hehe";
[self removeObserver:observer forKeyPath:@"observerProperty" context:@"Pass
Context"];
}
return self;
}
@end
@implementation KVOObserver
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@",change[@"new"]);
}
@end
4、MVC设计模式(略,参考之前的帖子)
1、单例模式
构造方法
@interface Singleton : NSObject
+(Singleton*)sharedInstance;
@property(nonatomic,strong) NSString* singletonData;
@end
@implementation Singleton
@synthesize singletonData = _singletonData;
static Singleton* sharedInstance = nil;
+(Singleton*)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc]init];
});
return sharedInstance;
}
@end
应用案例
UIApplication,UIAccelerometer,NSUserDefaults,NSNotificationCenter,NSFileManager,NSBundle
2、委托模式
构建方法
//委托协议
@protocol Delegate <NSObject>
//执行完毕
-(void)exeFinish;
@end
//通用类
@interface CustomClass : NSObject
//委托对象
@property(nonatomic,assign) id<Delegate>
delegate;
-(void)doSomething;
@end
@implementation CustomClass
@synthesize delegate = _delegate;
-(void)doSomething
{
//do something
NSLog(@"通知委托对象事情做完了");
if (self.delegate && [self.delegate respondsToSelector:@selector(exeFinish)])
{
[self.delegate exeFinish];
}
}
@end
//委托实现类
@interface DelegateImplements : NSObject <Delegate>
@end
@implementation DelegateImplements
-(void)exeFinish
{
NSLog(@"执行完毕");
}
@end
//创建对象
CustomClass* instance = [[CustomClass alloc]init];
DelegateImplements* delegate = [[DelegateImplements alloc]init];
instance.delegate = delegate;
应用案例
UITextFieldDelegate,UITableViewDelegate,UIActionSheetDelegate等。
3、观察者模式
//抽象观察者
@protocol Observer<NSObject>
@required
-(void)update;
@end
//抽象主题
@protocol Subject<NSObject>
-(void)addObserver:(id<Observer>)observer;
-(void)removeObserver:(id<Observer>)observer;
@end
//真正观察者
@interface TrueObserver : NSObject<Observer>
@end
@implementation TrueObserver
-(void)update
{
NSLog(@"刷新");
}
@end
//真正主题
@interface TrueSubject : NSObject<Subject>
{
//观察者数组
NSMutableArray* observers;
}
@property(nonatomic,strong) NSMutableArray*
observers;
+(TrueSubject*)sharedSubject;
@end
@implementation TrueSubject
@synthesize observers;
static TrueSubject* instance = nil;
+(TrueSubject*)sharedSubject
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc]init];
instance.observers = [NSMutableArray array];
});
return instance;
}
-(void)addObserver:(id<Observer>)observer
{
[self.observers addObject:observers];
}
-(void)removeObserver:(id<Observer>)observer
{
[self.observers removeObject:observers];
}
//通知所有对象
-(void)notifyAllOberser
{
for (id observer in self.observers)
{
[observer update];
}
}
@end
实际案例NSNotificationCenter
KVO机制
//KVO主题
@interface KVOSubject : NSObject
//观察属性
@property(nonatomic,copy) NSString* observerProperty;
@end
//KVO观察者
@interface KVOObserver : NSObject
@end
@implementation KVOSubject
@synthesize observerProperty;
-(id)init
{
self = [super init];
if (self)
{
KVOObserver* observer = [[KVOObserver alloc]init];
[self addObserver:observer forKeyPath:@"observerProperty" options:NSKeyValueObservingOptionNew context:@"Pass
Context"];
self.observerProperty = @"呵呵";
self.observerProperty = @"嘻嘻";
self.observerProperty = @"hehe";
[self removeObserver:observer forKeyPath:@"observerProperty" context:@"Pass
Context"];
}
return self;
}
@end
@implementation KVOObserver
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"%@",change[@"new"]);
}
@end
4、MVC设计模式(略,参考之前的帖子)
相关文章推荐
- IOS开发指南读书笔记4(IOS API分类)
- IOS开发指南读书笔记3(视图的生命周期)
- IOS开发指南读书笔记2(应用程序的生命周期)
- IOS开发指南读书笔记1(Xcode的基本使用)
- IOS滤镜处理
- iOS-openGLES程序制作基本步骤以及某些API
- iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)
- iOS学习笔记44-IOS 遍历未知对象的属性和方法
- iOS调用系统相册、相机界面语言设置为中文
- iOS 支付宝开发流程
- 基于文档的应用程序
- 【iOS】自定义TabBarController
- iOS中的Masonry纯代码适配屏幕例子
- iOS 手机通讯录,将电话保存到本机通讯录
- 根据cell上的按钮找到当前的cell 比用btn.superview 要好 不会有ios7-8导致崩溃的问题
- iOS 应用内付费(IAP)开发步骤
- iOS NSString 的用法总结
- ios开发之倒计时实现的两种方法
- 详解iOS应用程序沙盒(SandBox)测试、创建测试账号流程(
- iOS应用程序内购/内付费(一)