cocoa设计模式
来源:互联网 发布:淘宝快递单模板 编辑:程序博客网 时间:2024/06/09 07:32
1M_V_C
模型类:应该使用独立于表现层的方式封装数据,应该只引用模型类不应该引用视图或者控制器类,模型类是可变或不可变:
不可变的好处是节约时间和内存,在没有锁定的情况下是线程安全的,应该尽量使用不可变的
视图类:负责与用户交互,提供信息并且接受用户事件,但是自己不处理,交由控制器处理,除了父视图与子视图外,不应该引用其他视图或控制器
控制器:实现大部分应用程序的特定逻辑,在模型类与视图类之间起协调作用,访问全局对象时应该创建单例,
2委托-策略模式
一般而言对象不保留他们的委托,应该将委托声明为weak,因为但大多数情况是,对象的委托就是其控制器,而控制器总是保留的,如果对象想在保留委托就会形成循环引用,内存泄露
3命令模式
命令模式就是将请求封装成一个对象,与直接调用不同,必须把方法调用打包放进一个对象,之后可能调用,可以提高灵活性,允许请求排队,重定向,记录和序列化
1使用方法签名和调用
NSinvocation将目标,选择器,方法签名和所有的参数放进一个对象里,可以先存储以备调用,当NSinvocation被调用时,他会发消息,OC运行时会找到正确的方法来执行
方法实现IMP是一个纸箱如下签名的C函数的函数指针
id function(id self ,SEL _cmd..)
目标是接收消息的对象,选择器则是被发送的消息,就是方法的名称,如[nsstring length]和[nsdata length]虽然实现发放不一致但是他的选择器确实相同的
还包含一个方法签名(NSMethodSigature),封装了一个方法的返回类型和参数类型,只有返回类型和参数类型
NSMethodSigature * sig =[NSMethodSigature sigarureWithOBJCTypes:"@@:*"];
第一个@表明返回值是一个id 接下来@:表明方法接受一个id和SEL 最后的*表明第一个“真实”参数是一个字符串char*
有了选择器和签名,可以使用一个目标和参数值将他们联系起来构建一个NSinvocation 包含传递信息的一切 以下代码可以在[set addobject:stuff]调用
NSMutableSet *set =NSMutableSet set];
NSString * str = @"stuff";
SEL selector = @Selector(addObject:);
NSMethodSigature * sig = [set methodSigatureForSelector:selector];
Nsinvocation *invocation =[Nsinvocation invocationWithSigature:sig];
[invocation setTarget:set];
[invocation setSelector:selector];
[invocation setArgument:&str atIindex:2];//添加多个参数
[invocation invoke];
第一个参数至于2 因为0与1位置分别是target和selector 用处:
1 声明@dynamic动态属性 ,根据以下方法可以动态生成setter,getter方法
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;
- (void)forwardInvocation:(NSInvocation *)anInvocation;
2消息转发不受空间限制,只要获取到方法签名即可调用,在撤销操作时可调用
NSMethodSignature *sig = [selfmethodSignatureForSelector:@selector(addAlbum:atIndex:)];
NSInvocation *undoAction = [NSInvocationinvocationWithMethodSignature:sig];
[undoAction setTarget:self];
[undoActionsetSelector:@selector(addAlbum:atIndex:)];
[undoActionsetArgument:&deletedAlbumatIndex:2];
[undoActionsetArgument:¤tAlbumIndexatIndex:3];
[undoActionretainArguments];
// 3
[undoStackaddObject:undoAction];
将NSInvocation放入数组中逐个调用可实现效果
4观察者模式(kvo,通知)
5单例模式
- cocoa 设计模式
- cocoa设计模式
- cocoa设计模式总结
- cocoa设计模式
- Cocoa设计模式(iOS常用设计模式) Cocoa Design Patterns
- Cocoa如何应用设计模式
- 《Cocoa设计模式》读书笔记(1)
- 《Cocoa设计模式》读书笔记(2)
- Cocoa如何应用设计模式
- cocoa设计模式之观察者模式
- Cocoa基本原理指南之十一 - Cocoa设计模式
- [Cocoa]_[初级]_[Cocoa设计模式总结]
- Cocoa的单态(singleton)设计模式
- Cocoa的单态(singleton)设计模式
- cocoa设计模式经典摘录1
- Cocoa的单态(singleton)设计模式
- Cocoa的单例(singleton)设计模式
- cocoa设计模式之Template Method
- STL中map用法详解
- 第十讲 内存分配方式和调试机制
- 职场观察,高薪需要什么 - GeneHugh - 51CTO技术博客 (分享自 @51CTO技术博客)
- android内存管理机制(一)
- hadoop 数据排序
- cocoa设计模式
- 八皇后问题(参考算法竞赛入门经典)
- 第九讲 MFC的状态
- uva 548 - Tree
- 《设计模式其实很简单》 - 书摘精要
- CALayer_超经典的阐述原理
- C#开发微信门户及应用(3)--文本消息和图文消息的应答
- _allow_resetlogs_corruption的使用
- Java Web项目(Extjs)报错五