Objective-C设计需要帮助,需要协议吗?

时间:2013-01-24 18:30:35

标签: iphone ios objective-c cocoa-touch protocols

我的情况是ClassA包含UIView属性。我有两个ClassA,ChildA和ChildB的子项,它们都为这两个不同类型的UIView子类设置了这个UIView属性。我想要求这两个UIView子类都有一个名为maximumDimension的属性,然后我希望能够使用自己的UIView属性在ClassA中设置它。

实现这一目标的最佳方法是什么?它会是一个协议吗?如果是这样,有人能够提供有关如何在Objective-C中实现这一目标的代码吗?

2 个答案:

答案 0 :(得分:3)

  

这是一个协议吗?

是:

@protocol Foo <NSObject>
@property (nonatomic, assign) int maximumDimensions; // wild guess to type from name
@end

然后是实际属性:

@property (nonatomic, strong) id <Foo> bar;

答案 1 :(得分:2)

为了便于讨论,这是一个使用类别而不是协议的解决方案,将UIView扩展为 maximumDimensions 属性:

<强>的UIView + MaximumDimensions.h

@interface UIView (MaximumDimensions)
@property ( nonatomic, readonly ) CGSize maximumDimensions ;
@end

<强>的UIView + MaximumDimensions.m

@implementation UIView (MaximumDimensions)
-(CGSize)maximumDimensions { return self.bounds.size ; }
@end

现在,在ClassA的方法中,您可以访问self.view.maximumDimensions。 (因为UIView现在有一个 maximumDimensions 属性。)您的UIViewChildAChildB的子类可以实现-maximumDimensions以返回正确的答案。