有一个对象(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
答案 0 :(得分:2)
对象没有任何指向创建它的对象的指针。
你的initWithParent:方法会起作用,但你可能想要想一想为什么你的对象需要知道它的创建者,以及是否有更好的方法来完成你想要完成的任何事情。
此外,您可能希望将父属性设置为弱属性,或者您最终会在整个位置创建保留周期。
答案 1 :(得分:1)
_parent = parent;
方法应该是init
,但除此之外,这没有太大的错误。据我所知,做这类事情(initWithDelegate:
等)
然而......
编写@protocol
类符合的parent
可能是明智的,而不是仅仅使用id
,您需要一个符合协议的对象。< / p>