Does calling a method inside a block that calls another method referring to self cause a retain cycle?
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 dasblinkenlight 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.