日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

iOS设计模式 - 备忘录

發布時間:2025/7/14 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS设计模式 - 备忘录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

iOS設計模式 - 備忘錄

?

原理圖

?

說明

1. 在不破壞封裝的情況下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,這樣以后就可以將該對象恢復到原先保存的狀態

2. 本人已經將創建狀態與恢復狀態的邏輯抽象成了協議,并配合備忘錄中心一起使用

?

源碼

https://github.com/YouXianMing/iOS-Design-Patterns

// // MementoCenter.h // MementoPattern // // Created by YouXianMing on 15/9/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import "MementoCenterProtocol.h"@interface MementoCenter : NSObject/*** 存儲備忘錄對象** @param mementoObject 備忘錄對象* @param key 標記對象的鍵值*/ + (void)saveMementoObject:(id <MementoCenterProtocol>)mementoObject withKey:(NSString *)key;/*** 獲取備忘錄對象** @param key 標記對象的鍵值** @return 備忘錄對象*/ + (id)mementoObjectWithKey:(NSString *)key;@end // // MementoCenter.m // MementoPattern // // Created by YouXianMing on 15/9/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "MementoCenter.h" #import "FastCoder.h" #import <CommonCrypto/CommonDigest.h>@implementation MementoCenter+ (void)saveMementoObject:(id <MementoCenterProtocol>)mementoObject withKey:(NSString *)key {NSParameterAssert(mementoObject);NSParameterAssert(key);NSData *data = [self makeDataWithValue:[mementoObject currentState]];if (data) {[self storeValue:data with:[self MD5HashWithString:key]];} }+ (id)mementoObjectWithKey:(NSString *)key {NSParameterAssert(key);NSData *data = [self valueWithKey:[self MD5HashWithString:key]];if (data) {return [self makeObjectWithData:data];} else {return nil;} }#pragma mark - md5 + (NSString *)MD5HashWithString:(NSString *)string {CC_MD5_CTX md5;CC_MD5_Init(&md5);CC_MD5_Update(&md5, [string UTF8String], (CC_LONG) [string length]);unsigned char digest[CC_MD5_DIGEST_LENGTH];CC_MD5_Final(digest, &md5);NSString *s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",digest[0], digest[1],digest[2], digest[3],digest[4], digest[5],digest[6], digest[7],digest[8], digest[9],digest[10], digest[11],digest[12], digest[13],digest[14], digest[15]];return s; }#pragma mark - 本地持久化 + (void)storeValue:(id)value with:(NSString *)key {[[NSUserDefaults standardUserDefaults] setObject:value forKey:key]; }+ (id)valueWithKey:(NSString *)key {return [[NSUserDefaults standardUserDefaults] objectForKey:key]; }#pragma mark - 使用FastCode來處理對象 + (NSData *)makeDataWithValue:(id)value {return [FastCoder dataWithRootObject:value]; }+ (id)makeObjectWithData:(NSData *)data {return [FastCoder objectWithData:data]; }@end // // MementoCenterProtocol.h // MementoPattern // // Created by YouXianMing on 15/9/11. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h>@protocol MementoCenterProtocol <NSObject>@required /*** 生成當前狀態對象值** @return 對象值*/ - (id)currentState;/*** 恢復到指定的狀態** @param state 狀態*/ - (void)recoverFromState:(id)state;@end

?

分析

使用FastCoder來作為存儲工具

?

轉載于:https://www.cnblogs.com/YouXianMing/p/4802139.html

總結

以上是生活随笔為你收集整理的iOS设计模式 - 备忘录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。