协议上的Objective-c定义了属性协议

时间:2013-12-02 10:25:00

标签: ios objective-c properties protocols

我读了一些代码,我创建了@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协议的意思。 有一个简单的例子吗?感谢。

2 个答案:

答案 0 :(得分:0)

您必须在将要使用的界面上添加协议。

@protocol MyViewControllerDelegate;

@interface MyViewController : UIViewController

@property (weak, nonatomic) id <MyViewControllerDelegate> delegate;
@property (copy, nonatomic) NSArray *viewControllers;
@end

@protocol MyViewControllerDelegate <NSObject>

@optional

//sth
@end

答案 1 :(得分:0)

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

@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(在您的示例中,属性是readonly,因此只有getter)。 @synthesize也会创建ivar,在本例中为p2