问题
Can doFirst
cause a retain cycle here?
@interface Example : NSObject
@property (nonatomic, strong) void (^block)();
@end
@implementation Example
- (void)doFirst
{
__weak id weakSelf = self;
self.block = ^ {
[weakSelf doSecond];
};
self.block();
}
- (void)doSecond
{
self.value = //...
// do other stuff involving self
}
@end
回答1:
Unlike blocks, methods are not objects; they cannot hold a permanent reference to objects.
Your code would not cause a retain cycle. The fact that the code inside doSecond
references self
explicitly does not mean that self
would get retained an extra time. When your block calls doSecond
, its self
comes from the weakSelf
reference inside doFirst
.
Note: When you store blocks as properties, use (nonatomic, copy) instead of (nonatomic, strong)
.
回答2:
No It won't. Because It just point to method which won't hold whatwhere inside methods which just an reference as like object.
来源:https://stackoverflow.com/questions/21909375/does-calling-a-method-inside-a-block-that-calls-another-method-referring-to-self