【发布时间】:2015-07-04 22:22:31
【问题描述】:
我一直想知道如何使用只读属性建立反向关系。假设有一个父类:
@interface Parent
@property (strong, readonly) Child * child;
@end
还有一个孩子
@interface Child
@property (weak, readonly) Parent * parent;
@end
问题是两者都需要另一个已经初始化,然后属性是只读的。这首先是在查看 Apple 的文档并看到它在 CBCharacteristic 中应用时出现的。他们是怎么做到的?
编辑:为了清楚起见,我不是在谈论继承!也许这是一个糟糕的名字选择。这就是我想要的:
Parent * parent = [Parent new];
Child * child = [Child new];
parent.child = child;
child.parent = parent;
这是一个循环关系!
我刚刚想到了这个:
Parent * parent = [Parent alloc];
Child * child = [Child alloc];
parent = [parent initWithChild:child];
child = [child initWithParent:parent];
应该没问题吧?
编辑:别介意最后一次编辑。请参阅下面的 cmets。
【问题讨论】:
-
您的 sn-p 不是一个好主意。
init...被允许丢弃它开始的实例并返回一个新实例,这将使另一个对象持有垃圾指针。将alloc和init分开是不好的 Cocoa 风格。 -
你是对的!而且我只是注意到当我初始化父实例时我没有子实例......
标签: objective-c