关闭

IOS开发指南读书笔记5(IOS 常用设计模式)

标签: Objective-c读书笔记
316人阅读 评论(0) 收藏 举报
分类:
IOS开发指南读书笔记5(IOS 常用设计模式)
1、单例模式
构造方法

@interface Singleton : NSObject

+(Singleton*)sharedInstance;

@property(nonatomic,strongNSString* 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,assignid<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


@im
plementation TrueObserver

 -(void)update
 
{
 
    NSLog(@"刷新");
 
}
 
@end


//真正主题
@interface TrueSubject : NSObject<Subject>
 
{
 
     //观察者数组
 
     NSMutableArray* observers;
 
 }

@property(nonatomic,strongNSMutableArray* 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,copyNSString* 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设计模式(略,参考之前的帖子) 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:39965次
    • 积分:923
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:1篇
    • 译文:0篇
    • 评论:3条
    文章分类