在Protocol中定义@property

时间:2012-08-11 09:40:31

标签: iphone objective-c ios cocoa-touch

我有许多UIViewController个子类,我希望它们共享名为session的相同属性,该属性处理“已登录”状态。

我知道我可以使用父类,但这是非常明确的,所以我想知道我是否可以通过共享协议“强制”session属性。

我从未见过在协议中定义的显式属性(显然你可以定义setter和getter),所以在协议中定义一个可建模式的属性吗?

4 个答案:

答案 0 :(得分:10)

  

@property也可以出现在协议或类别的声明中。

陈述于official apple documentation。所以没问题。

答案 1 :(得分:2)

您可以在协议中拥有属性,前提是每个符合您协议的类都具有该属性的相应@synthesize,或者提供getter和setter。

答案 2 :(得分:2)

是的,使用协议可以添加属性:

@protocol MyProtocol <NSObject>

@property (nonatomic, retain) NSFoobar *baz;

@end

并且@synthesize baz;在采用此协议的每个类中(或者您可以使用@optional关键字将声明的属性标记为可选)。

答案 3 :(得分:1)

在.h文件中:

 @property(nonatomic,strong)UILabel *mylabel;

在.m文件中:

 @synthesize mylabel = _mylabel;

编译器将为mylabel创建getter和setter。

Ex -> 

-(void)setMylabe:(UILabel *) mylabel { //setter


}

-(UIlabel*)mylabel { // getter


}