В obj-c можно получить родительский экземпляр свойства? - PullRequest
0 голосов
/ 12 января 2009

Интересно, возможно ли в obj-c получить доступ к родительскому экземпляру из свойства, например:

@interface AObject : NSObject {
}

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

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

Ответы [ 5 ]

1 голос
/ 12 января 2009

Не то, чтобы я знал. Вы должны были бы сообщить AObject о своем родителе. Могут быть другие способы сделать это, если вы возитесь со средой выполнения, но просто сделать так, чтобы AObject требовал родителя.

0 голосов
/ 18 января 2009

Если вы действительно хотите это сделать, вы можете переопределить метод «retain» в AObject, чтобы посмотреть текущий стек и найти идентификатор вызывающего класса. Извините, вам придется выяснить, как это сделать, я просто знаю, что вы можете из другого исследования.

Если то, что вы на самом деле пытаетесь сделать, это использовать какой-то оператор отладки, который сообщает вам, кто владеет конкретным объектом - вы можете просто переопределить сохранение и установить точки останова или поместить туда полезные дампы данных.

0 голосов
/ 12 января 2009

Вы должны были бы уведомить 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;
}
0 голосов
/ 12 января 2009

Нет, супер для получения класса.

Я спрашиваю, как получить родительский объект (как в дереве).

Но я думаю, что это невозможно ... и необходимо связать ребенка с родителем.

0 голосов
/ 12 января 2009

Я не совсем уверен, что вы спрашиваете. Вы ищете ключевое слово super?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...