Protocols

Protocol 相当于 .Net 和 Java 中的 interface

protocol 声明

@protocol ProtocolName

// list of methods and properties

@end

 

protocol 中可以声明实例属性和方法,也可以声明class属性和方法(相当于 .Net 和 Java 中的静态属性和静态方法)

protocol 的注入:

@interface ClassName : NSObject

@property (weak) id <ProtocolName> obj;

@end

 

默认情况下,protocol中定义的方法和属性都是required的,继承了protocol的类必须实现这些required的方法和属性。可以用optional关键字在protocol中定义一些不用必须实现的方法或属性

@protocol NothinProtocal

- someMethod;

@optional

- optionalMethod;

@end

 

在调用optional方法之前,需要先检查类对象是否实现了该方法,例如

if([Self.obj respondsToSelector:@selector(optionalMethod)]){

  [self.obj optionalMethod];

}

 

因为respondsToSelector方法是在NSObject这个protocol中定义的,所以NothinProtocal需要继承NSObject. 否则上述代码会编译失败

protpcol的继承:

@protocol ProtocolName <NSObject>

...

@end

 

实现protocol:

@interface ClassName : NSObject <protocol1, protocol2, protocol3, ...>

...

@end

posted @ 2014-07-25 12:31  Super猪  阅读(330)  评论(0编辑  收藏  举报