我想知道在 obj-c 中是否可以从属性访问父实例,例如:
@interface AObject : NSObject {
}
-(void) sample{
NSLog("%@", [[self parentInstance] Id]);
}
@interface DbObject : NSObject {
NSInteger Id;
AObject* ob;
}
我想知道在 obj-c 中是否可以从属性访问父实例,例如:
@interface AObject : NSObject {
}
-(void) sample{
NSLog("%@", [[self parentInstance] Id]);
}
@interface DbObject : NSObject {
NSInteger Id;
AObject* ob;
}
不是我知道的。您必须让 AObject 知道它的父级。如果您摆弄运行时,可能还有其他方法可以做到这一点,但让 AObject 需要父级更容易。
我不完全确定你在问什么。您在寻找super
关键字吗?
不,超级是为了上课。
我要问的是如何获取父对象(例如在树中)。
但我认为这是不可能的......并且有必要将孩子与父母联系起来。
您必须AObject
了解DbObject
,但您还应该访问DbObject
使用选择器的属性。
@interface AObject : NSObject
{
id father;
}
- (id) initWithFather:(id) theFather;
- (void) sample;
@end
@implementation AObject
- (id) initWithFather:(id) theFather
{
father = theFather;
return self;
}
- (void) sample
{
NSLog (@"%d", [father Id]);
}
@end
@interface DbObject : NSObject
{
NSInteger Id;
}
- (id) initWithId:(NSInteger) anId;
- (NSInteger) Id;
@end
@implementation DbObject
- (id) initWithId:(NSInteger) anId;
{
Id = anId;
return self;
}
- (NSInteger) Id
{
return Id;
}
@end
int main (int argc, char *argv[])
{
DbObject *myDbObject = [[DbObject alloc] initWithId:5];
AObject *myAObject = [[AObject alloc] initWithFather:myDbObject];
[AObject sample];
return 0;
}
如果你真的想这样做,你可以重写 AObject 中的“retain”方法来查看当前堆栈并查找调用类的 ID。对不起,你必须调查如何做到这一点,我只知道你可以从其他研究中获得。
如果您真正想做的是有某种调试语句来告诉您谁拥有特定对象 - 您可以覆盖保留并设置断点或将有用的数据转储放在那里。