在协议中定义@property



我有许多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

}

相关内容

最新更新