我有一个自定义的UIView类,需要知道它的父级(另一个不同的自定义UIView类)。
如果有人能够理解这一点,你能帮忙解决这个问题吗?感谢。
答案 0 :(得分:2)
您想要的通常称为前瞻声明。
有关详细信息,请参阅Objective-C: Forward Class Declaration
答案 1 :(得分:0)
有很多方法可以解决这个问题,例如通过将对另一个类的引用声明为id,并向其发送消息(在Objective-C中,您甚至不需要转换它们,编译器不会抱怨这个)。
例如:
@property(nonatomic,weak) id child;
但是,您可以通过使用处理这两个类的根控制器的方式来检查您的设计。这种方式A不直接与B对话而B不直接与A对话。相反,如果A想与B说话,则用C说话,C与B说话,反之亦然。
答案 2 :(得分:0)
虽然可以使用前向声明(@class ParentClass
)以及对子项头文件中父(@property (nonatomic, weak) ParentClass *parent
)的弱引用,但这通常是不是良好的编程习惯。
这通常不是一个好主意的原因:
1)随着项目变得越来越大,你可能会违反DRY(“不要重复自己”)因为孩子需要某个班级的父母...如果另一个家长后来需要创建同一个子对象?您必须创建一个新类,声明新父级的另一个前向类,并且具有弱属性。
2)这也可能导致意大利面条代码......如果你想为父母添加一个影响孩子正在使用的方法的新功能怎么办?你是否创造了一种略有不同的新方法(见第1点关于违反DRY的内容)?你是否为原始方法创建了一个输入(你还必须确保孩子现在知道这个变化并传递适当的输入。)
相反,委托设计模式在这里效果更好。 Apple也经常在他们的图书馆中使用它。在示例中,UITableView
声明委托和数据源,以便它可以将操作(单元格的点击)和数据输入(创建自定义单元格)委托给其他拥有的类,而UITableView
对象不必知道关于所述父类的实现。
有关委派模式的更多信息,请参阅维基百科:
http://en.wikipedia.org/wiki/Delegation_pattern
有关创建自己的protocols
的教程(如何在iOS中实现委派),请参阅此教程:
http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-custom-delegates/
对于iOS上的高质量教程和介绍,包括委托和其他必要的iOS概念,请参阅Ray Wenderlich的网站:
祝你好运!