Cocoa/Objective C (OSX NOT IOS) accessing parent Object from child(可可/目标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)从子对象访问父对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:可可/目标C(OSX不是iOS)从子对象访问父对象


- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- Android viewpager检测滑动超出范围 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01