Objective-C设计模式,MVC的实现,以及协议与委托的运用

  在iPhone的开发过程中经常要用到界面,而苹果公司为其设计了很好的管理思路,就是采用常用的MVC模式,在iPhone中,所有的图形控件都是继承于UIView,就是"V".UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现.对于不同的 UIView,都有相应的UIViewController 对应MVC中的"C".对于"M",也就是数据模型,那就留给用户自己发挥了.

  Objective-C只支持单继承,和java很像,单可以实现多个协议(Protocol).

首先,定义个View

1.@interface MyUIView : UIView {   
2.
3.
4.  //定义一些控件
5.
6.  id<MyUIViewDelegate> delegate; //这个定义会在后面的解释,它是一个协议,用来实现委托。
7.
8.}
9.
10.//定义一些控件设置方法
11.@property id<MyUIViewDelegate> delegate; //定义一个属性,可以用来进行get set操作
12.
13.@end

然后定义一个Protocol,按照Cocoa的习惯,一般它以delegate结尾,熟悉C#的同学应该知道它的意义.其实不论是接口,委托,还是回调函数,本质上都做了一件事情.就是定义了一个操作契约,然后由用户自己来实现它的具体内容.

1 @protocol MyUIViewDelegate  
2 //这里只需要声明方法
3 - (void)func1
4 - (int)func2:(int)arg
5
6 @end

完成以上两步之后就需要设计自己的UIViewController了.一般简单的做法,可以让这个Controller来实现上面定义的MyUIViewDelegate.在Cocoa框架中,很多控件和它的Controller都是采用的这种方式.

1.@interface MyUIViewController : UIViewController <MyUIViewDelegate>  
2.{
3.//成员变量
4.}
5.
6.//成员方法,类方法,属性
7.
8.@end

定义好了,现在,你只要在MyUIViewController中声明MyUIView成员变量,并把自己作为委托对象传给MyUIView,就可以成为MyUIView的代理,这样,当MyUIView某事件发生时就可以调用MyUIViewController中实现的委托方法了.

  说的很是浅显,具体实现请自己完成,自己练习.

by MAC-z