我有许多UIViewController
子类,我希望它们共享名为session
的相同属性,该属性处理"已登录"状态。
我知道我可以使用父类,但这非常明确,所以我想知道我是否可以通过共享协议"强制执行"session
属性。
我从未见过在协议中定义的显式属性(显然您可以定义 setter 和 getter),那么在协议中定义属性是可取的模式吗?
@property
也可以出现在协议或类别的声明中。
在官方苹果文档中说明。所以那里没有问题。
是的,使用协议可以添加属性:
@protocol MyProtocol <NSObject>
@property (nonatomic, retain) NSFoobar *baz;
@end
并且在采用此协议的每个类中@synthesize baz;
(或者您可以使用 @optional
关键字将声明的属性标记为可选)。
您可以在协议中具有属性,前提是符合协议的每个类都具有该属性的相应@synthesize
,或者提供 getter 和 setter。
在 .h 文件中:
@property(nonatomic,strong)UILabel *mylabel;
在 .m 文件中:
@synthesize mylabel = _mylabel;
编译器将为 MyLabel 创建 getter 和 setter。
Ex ->
-(void)setMylabe:(UILabel *) mylabel { //setter
}
-(UIlabel*)mylabel { // getter
}