美文网首页
Property in Protocol

Property in Protocol

作者: 思考的小妮子 | 来源:发表于2016-08-25 14:30 被阅读25次

协议中可以声明属性:

@protocolPrintable

@property(copy,nonatomic)NSString*desc;

@end

遵从该协议的类,会生成属性。不同于类定义中声明的属性,协议属性并不会自动合成getter / setter方法。

对于遵从这种协议的类,可以用两种方法来合成属性。

1、在类的定义中,声明相同的属性,因为此属性会自动合成,所以类自动满足协议要求。AppDelegate 中的 window 属性,就是通过这种方法生成的。

@interfaceAppDelegate :UIResponder

@property(strong,nonatomic)UIWindow*window;

@end

此种方法实现协议属性,只能在类的定义中声明属性,不可以在扩展中,下面的做法是错误的:

@interface MyClass () // Class extension

@property(copy,nonatomic)NSString*desc;

@end

2、在类的实现中使用 synthesize 进行合成

@implementation MyClass () // Class implementation

@synthesizedesc;

@end

扩展

以下几种属性声明,编译器不会自动合成,生成成员变量:

1、category 中声明的属性不会自动合成;

2、protocol 中声明的属性(本文)不会自动合成;

3、 @dynamic 修饰的属性不会自动合成;

4、 readonly 属性,类中实现getter方法,不会自动合成;

5、 readwrite 属性,类中实现getter / setter方法,不会自动合成,

6、父类中的属性,子类重新声明,子类的属性不会自动合成。

相关文章

网友评论

      本文标题:Property in Protocol

      本文链接:https://www.haomeiwen.com/subject/xuhasttx.html