【问题标题】:Cocoa/Objective C (OSX NOT IOS) accessing parent Object from childCocoa/Objective C (OSX NOT IOS) 从子对象访问父对象
【发布时间】:2023-03-21 04:24:01
【问题描述】:

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

不过,我在理解它方面还是有一些问题,我希望社区可以帮助理解:

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

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

MYCustomObject.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 上使用协议工作。上述想法还有其他可能吗?

【问题讨论】:

  • 阅读How to Ask 并查看faq。 Stackoverflow 不是论坛。您不会编辑您的问题以包含您的解决方案,而是发布答案。另外,省略“我是新来的......”。您是否是新手并不重要,因为相同的标准适用于所有问题。只是事实。请务必仔细阅读我链接到的第一页。
  • 感谢您指出这一点。下次发帖时我会处理的。

标签: objective-c macos cocoa object parent-child


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2017-05-08
    • 2018-02-18
    相关资源
    最近更新 更多