【发布时间】:2015-08-05 05:15:16
【问题描述】:
@interface
@property (strong) void(^myPropertyBlock)(void);
@end
@implementation
self.myPropertyBlock = ^{[self anyMethod];};
@end
现在编译器显示一个关于“强引用循环”的警告,这是它应该做的。现在,如果我将“自我”设置为弱属性,它工作得非常好,因为正如预期的那样,它将打破强引用循环。
MyViewController * __weak _self = self;
现在问题来了:
@interface
@property (weak) void(^myPropertyBlock)(void);
@end
@implementation
self.myPropertyBlock = ^{[self anyMethod];};
@end
1) 如果我将块设置为弱属性,它也应该打破强引用循环。但是,令我惊讶的是,它没有。
我已经在网上搜索过,但没有找到任何相关内容。
【问题讨论】:
-
"1) 如果我将块设置为弱属性,它也应该打破强引用循环。但是,令我惊讶的是,它没有。实际上,它会导致块被立即释放,因为它没有强引用,并且属性将设置为
nil。 -
@newacct 是的,这可能是我正在寻找的答案。但是你能告诉我它什么时候会被设置为 nil。假设我在定义块后立即调用它。还有一件事我想问的是为什么编译器会给出关于保留周期的警告。
-
@newacct 我的意思是无论如何:无论是否设置为 nil,但我的理解是没有保留周期。那么为什么会发出警告。