我在.h
中声明了以下块@property (strong, nonatomic) void(^setHandedness)(BOOL hand);
它在匹配的.m
中定义 setHandedness = ^(BOOL hand){
_isRightHanded = hand;
};
并传递给子视图控制器,该控制器具有相同形式的块声明。除了弱势
@property (weak, nonatomic) void(^setHandedness)(BOOL hand);
用弱代替强删除警告。但我不明白为什么?
然后在子视图控制器中调用该块
setHandedness(handedness);
我有警告告诉我自己可能会导致保留周期?有任何想法吗。欢呼声。
答案 0 :(得分:4)
警告的原因是:
现在您有两个彼此引用的对象。即使没有其他人引用它们,它们也会保持对方活着,永远不会被解除分配。
以下是Apple's documentation for blocks and variables
的引用如果通过引用访问实例变量,则保留self;
您的第二个视图控制器与您的保留周期无关。
答案 1 :(得分:1)
你有一个可能的保留周期,因为通常的情况是,当父指向具有强指针的子节点,并且子节点指向具有另一个强指针的父节点时,它们将保持活着并且永远不会被处理(这就是ARC的工作方式)。当您将子指针替换为弱指针时,这不会发生。