4

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

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

我从未见过在协议中定义的显式属性(显然您可以定义 setter 和 getter),那么在协议中定义属性是一种可取的模式吗?

4

4 回答 4

10

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

苹果官方文档中说明。所以那里没有问题。

于 2012-08-11T09:57:09.087 回答
3

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

@protocol MyProtocol <NSObject>

@property (nonatomic, retain) NSFoobar *baz;

@end

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

于 2012-08-11T09:55:43.943 回答
2

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

于 2012-08-11T09:44:07.303 回答
1

在 .h 文件中:

 @property(nonatomic,strong)UILabel *mylabel;

在 .m 文件中:

 @synthesize mylabel = _mylabel;

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

Ex -> 

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


}

-(UIlabel*)mylabel { // getter


}
于 2012-08-11T10:00:18.817 回答