Objective-c在协议上定义了一个属性协议



我读了一些代码,创建了@protocol并定义了@property的协议。

例如

protocol1.h

@protocol protocol2;
@protocol protocol1
-(void)p1_method1;
-(void)p1_method2;
@property (readonly, nonatomic) id<protocol2>p2;
@end

protocol2.h

@protocol protocol2
-(void)p2_method1;
-(void)p2_method2;
@end

我不知道这个协议有@property协议的意思。有一个简单的例子吗?谢谢

您必须在将要使用的接口之上添加协议。

@protocol MyViewControllerDelegate;
@interface MyViewController : UIViewController
@property (weak, nonatomic) id <MyViewControllerDelegate> delegate;
@property (copy, nonatomic) NSArray *viewControllers;
@end
@protocol MyViewControllerDelegate <NSObject>
@optional
//sth
@end

您所需要做的就是在符合protocol1的类中使用@synthesize p2。协议中的属性不会自动合成。

@interface Class1 : NSObject <protocol1>
@end
@implementation Class1
@synthesize p2;      // Synthesize p2, the property from protocol1
- (void)p1_method1 {
    // Do something    
}
- (void)p1_method2 {
    // Do something else
}

这将为该属性创建正确的getter/setter(在您的示例中,该属性是只读的,因此仅为getter)。@synthesize还将创建ivar,在本例中为p2

最新更新