可可/目标C(OSX不是iOS)从子对象访问父对象 [英] Cocoa/Objective C (OSX NOT IOS) accessing parent Object from child

查看:42
本文介绍了可可/目标C(OSX不是iOS)从子对象访问父对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是StackOverflow的新手,也是ObjectiveC的新手。我做了很多研究,已经找到了一些答案,比如:Accessing objects of parent class in cocoa

尽管如此,我在理解它时仍有一些问题,我希望社区能够帮助理解:

我有一个视图控制器,在这个控制器中,我创建了一个自定义NSObject类的实例。我想从对象实例中访问视图控制器的(父)属性和方法。

MYCustomViewController.h

@interface MYCustomViewController : NSViewController

// Vars
@property BOOL testBool;

@end

MYCustomViewController.m

@implementation MYCustomViewController

- (void) someMethod
{
    self.testBool = true;
    _importController = [[MYCustomObject alloc] init];
    [_importController test];
}

@end

MYCustomObt.h

@interface MYCustomObject : NSObject
- (void)test;
@end

MyCustomObject.m

@implementation MYCustomObject

- (void)test
{
    // HOW CAN I ACHIEVE THIS?
    myParent.testBool; // --> true

    // AND THIS?
    [myParent someMethod];
}

@end

我还在学习,所以任何(不太简短)的解释都是很好的。 想法是:在物体瞬间发送"自我",但如何发送呢?

瞄准OSX 10.10、Xcode 8、OSX 10.12

编辑:在MYCustomObject上使用协议使其工作。上述想法还有其他可能吗?

推荐答案

Objective-C(和SWIFT)没有"父对象"是创建对象的对象的语言概念。(课堂上有一种家长/孩子的关系。)如果您的模型需要父连接,则只需将创建父连接传递给init方法。

例如,给定类MustHaveParent可以定义以下内容:

@implementation MustHaveParent
{
   id myParent; // reference to my parent
}

- (instancetype) initWithParent:(id)parent
{
   self = [super init];
   if(self)
      myParent = parent;
   return self;
}

可以使用以下命令创建此类的实例:

// myChild is a *local* variable, see below
MustHaveParent *myChild = [[MustHaveParent alloc] initWithParent:self];

如果您的模型确实需要这样的引用,则应注意不要创建引用循环,即父引用子引用而子引用父引用。这就是上面的例子使用局部变量的原因,如果引用存储在创建者的实例变量中,就会有一个循环。虽然并不总是坏的周期,但经常会导致内存泄漏。如果您需要了解更多有关这方面的信息,请查阅"引用周期"、"强引用"、"弱引用"等。

HTH

这篇关于可可/目标C(OSX不是iOS)从子对象访问父对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆