0

我想知道在 obj-c 中是否可以从属性访问父实例,例如:

@interface AObject : NSObject {
}

-(void) sample{
 NSLog("%@", [[self parentInstance] Id]);
}

@interface DbObject : NSObject {
    NSInteger Id;
    AObject* ob;
}
4

5 回答 5

1

不是我知道的。您必须让 AObject 知道它的父级。如果您摆弄运行时,可能还有其他方法可以做到这一点,但让 AObject 需要父级更容易。

于 2009-01-12T20:34:44.447 回答
0

我不完全确定你在问什么。您在寻找super关键字吗?

于 2009-01-12T20:18:35.617 回答
0

不,超级是为了上课。

我要问的是如何获取父对象(例如在树中)。

但我认为这是不可能的......并且有必要将孩子与父母联系起来。

于 2009-01-12T20:38:53.657 回答
0

您必须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;
}
于 2009-01-12T20:51:22.807 回答
0

如果你真的想这样做,你可以重写 AObject 中的“retain”方法来查看当前堆栈并查找调用类的 ID。对不起,你必须调查如何做到这一点,我只知道你可以从其他研究中获得。

如果您真正想做的是有某种调试语句来告诉您谁拥有特定对象 - 您可以覆盖保留并设置断点或将有用的数据转储放在那里。

于 2009-01-18T04:59:52.827 回答