如何获取对在Objective-C中实例化第二个对象的对象的引用?

时间:2014-02-07 03:48:56

标签: objective-c object parent kvc

有一个对象(secondObject)是NSObject的子类的实例,在secondObject中,我想获得对实例化secondObject的对象的引用(firstObject)。

示例:

在FirstObject.m(UIViewController的子类)

    SecondObject *secondObject = [[SecondObject alloc] init];
在SecondObject.m中

    @implementation SecondObject
    - (id) init {
        self = [super init];
        NSLog(@"Parent object is of class: %@", [self.parent class]);
    return self;
    }
    @end

我正在寻找类似于viewControllers

的.parentViewController属性的东西

我一直在研究KeyValueCoding,但一直未能找到解决方案。

我实现的解决方法是在secondObject.m中创建一个initWithParent:(id)父方法,然后在实例化时传递self。

在SecondObject.m中

    @interface SecondObject ()
    @property id parent;
    @end

    @implementation SecondObject
    - (id) initWithParent:(id)parent {
        self = [super init];
        self.parent = parent;
        NSLog(@"Parent object is of class: %@", [self.parent class]);
        return self;
    }

    @end

然后在fisrtObject.m中实例化对象,如下所示

    SecondObject *secondObject = [[SecondObject alloc] initWithParent:self];

有更简单的方法吗?

Rgds .... enrique

2 个答案:

答案 0 :(得分:2)

对象没有任何指向创建它的对象的指针。

你的initWithParent:方法会起作用,但你可能想要想一想为什么你的对象需要知道它的创建者,以及是否有更好的方法来完成你想要完成的任何事情。

此外,您可能希望将父属性设置为弱属性,或者您最终会在整个位置创建保留周期。

答案 1 :(得分:1)

_parent = parent;方法应该是init,但除此之外,这没有太大的错误。据我所知,做这类事情(initWithDelegate:等)

实际上很常见

然而......

编写@protocol类符合的parent可能是明智的,而不是仅仅使用id,您需要一个符合协议的对象。< / p>