objective-C中协议的理解
来源:互联网 发布:淘宝天猫秒杀群骗局 编辑:程序博客网 时间:2024/06/06 11:47
转自菩提http://www.cnblogs.com/yjmyzz/archive/2011/03/02/1969126.html
讲的很好,跟大家分享一下,一会儿在研究一下,然后自己写一篇,自己理解的
objective-C中的接口与泛型
不过在obj-c中有二个与之接近的概念"非正式协议(interface)"与"正式协议(protocal)"。非正式协议在obj-c中的关键字虽然也是interface,但是这个跟c#中的接口(interface)并不完全相同。
#import <Foundation/Foundation.h>@interface Sample : NSObject {}-(void) HelloWorld;@end
@protocol IQuery-(void) Query:(NSString*) sql;@end
#import <Foundation/Foundation.h>#import "IQuery.h"@interface DBQuery : NSObject<IQuery> {}@end
#import "DBQuery.h"@implementation DBQuery-(void) Query:(NSString *)sql{NSLog(@"Query is called. sql:%@",sql);}@end
@protocol IQuery@required-(void) Query:(NSString*) sql;@optional-(void) HelloWorld; @end
有了@optional关键字以后,其实“非正式协议”在语义上完全可以被“正式协议”所取代,事实上Cocoa中的非正式协议都在逐渐被标有@optional方法的正式协议所代替。
如果你在XCode的代码中,选中NSObject,右击-->Jump to Definition,会发现NSObject其实就是一个interface或protocal
选择protocal NSObject 继续,会看到NSObject.h文件中关于protocal NSObject的定义
同样的,你还可以看到interface NSObject的定义
从这里可以看到,非正式协议的interface NSObject其实最终采用的还是正式协议protocal NSObject.
也就是说,在obj-c的OO世界中,身为万物之祖的NSObject其实也就一个"正式协议”,所以从NSObject派生出的所有类,都只是在遵守一个或多个协议而已。
另一个话题泛型
在obj-c中,一切皆为指针。前面的学习中,我们已经接触到了一种特殊的类型id,它可以认为是一种特殊的指针:可以指向任何类型的对象。id 再加上正式协议,能够达到形似c#中泛型的效果(注:只是形似,并非神似)
#import <Foundation/Foundation.h>#import "IQuery.h"@interface DBQuery : NSObject<IQuery> {}-(void) test:(id<IQuery>) obj;@end
注意这里的 -(void) test:(id<IQuery>) obj; 这表明test方法接受一个任意类型的对象做为参数,但是该参数对象必须实现接口IQuery(也可以说成该参数对象必须采用正式协议IQuery),是不是跟c#中的
void test(List<IQuery> obj) 长得很象?
- objective-c中协议protocol的理解
- objective-C中协议的理解
- objective-c中关于协议protocol的一些理解
- Objective-C 中协议
- Objective-c中static的理解
- Objective-C 协议protocol的用法和理解
- [Objective-C] 理解 Objective-C 的 ARC
- Effetive Objective - C 1.Objective 22.理解NSCopying协议
- 【Objective-C】OC中协议(Protocol)的基本概念和用法
- iOS开发:Objective-C中通知与协议的区别?
- iOS开发:Objective-C中通知与协议的区别?
- Objective-c的NSCopying协议
- Objective-c的协议protocol
- Objective-C的NSCopying协议
- 深入理解Objective-c中@class的含义
- 深入理解Objective-c中@class的含义(很好)
- 深入理解Objective-c中@class的含义
- 深入理解Objective-c中@class的含义
- 装装软件
- Objective-c 反射
- MFC工作线和UI主线程互锁问题的解决方法
- Java实现图片内容无损任意角度旋转
- linux下查找文件内容
- objective-C中协议的理解
- NSNumber 类型判断
- RTX2012概述-1
- zygote system_server的启动
- php和js的json转换
- 致黑马全体老师的一封感谢信
- Android 要注意的内存占用问题
- 测试acl
- (swing读书笔记)ProgressMonitor