Iphone 在协议中定义@property
我有许多Iphone 在协议中定义@property,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,我有许多UIViewController子类,我希望它们共享名为session的相同属性,该属性处理“已登录”状态 我知道我可以使用父类,但这是非常明确的,因此我想知道是否可以通过共享协议“强制”session属性 我从未见过协议中定义的显式属性(显然,您可以定义setter和getter),那么在协议中定义属性是一种可取的模式吗?您可以在协议中拥有属性,前提是符合协议的每个类都有相应的@synthesis,或者提供一个getter和setter。是的,使用协议可以添加属性: @protocol
UIViewController
子类,我希望它们共享名为session
的相同属性,该属性处理“已登录”状态
我知道我可以使用父类,但这是非常明确的,因此我想知道是否可以通过共享协议“强制”session属性
我从未见过协议中定义的显式属性(显然,您可以定义setter和getter),那么在协议中定义属性是一种可取的模式吗?您可以在协议中拥有属性,前提是符合协议的每个类都有相应的
@synthesis
,或者提供一个getter和setter。是的,使用协议可以添加属性:
@protocol MyProtocol <NSObject>
@property (nonatomic, retain) NSFoobar *baz;
@end
@protocol-MyProtocol
@财产(非原子,保留)NSFoobar*baz;
@结束
和〈代码〉@合成baz在采用此协议的每个类中(或者您可以使用@optional
关键字将声明的属性标记为可选)
@property
也可以出现在协议或类别的声明中
在报告中说明。因此没有问题。在.h文件中:
@property(nonatomic,strong)UILabel *mylabel;
在.m文件中:
@synthesize mylabel = _mylabel;
编译器将为mylabel创建getter和setter
Ex ->
-(void)setMylabe:(UILabel *) mylabel { //setter
}
-(UIlabel*)mylabel { // getter
}
但是对于类类别,通常不能向类添加实例变量。协议也一样,但这意味着类将符合属性。为什么不使用协议呢?使用类别,我必须为每个类编写一个,使用协议,我只需合成声明的属性。@mAu:这是一个公平的问题。我重写了我的答案,提到了如何使用协议来实现这一点。