Cool. Thank you that was sort of my thought. Then went and watched the WWDC video and went into a bit of a panic.
Scott On Apr 12, 2012, at 11:18 AM, Ken Thomases wrote: > On Apr 12, 2012, at 12:04 PM, Scott Andrew wrote: > >> I have a question about retain cycles with ARC and blocks. >> >> I have the following code: >> >> __weak MyViewController* controller = self; >> >> [UIView animateWithDuration:.25 animations:^{ >> controller.alpha = 0; >> } >> completion:^(BOOL finsihed) { >> >> [controller showState]; >> }]; >> >> >> >> -(void) showState { >> self.textView.text = self.stateText; >> } >> >> I have a question about what happens when I use self in showState. DId i >> just cause a reference counting issue where I now have an extra retain on >> self and it's not going to be cleaned up? > > No. The compiler looks at the code _in the block_ to know what the block > should retain. It doesn't (for this purpose) look inside the -showState > method. It can't even reliably know for sure that the call to -showState in > the block refers to that implementation of -showState. For example, this > code could all be called from a superclass which overrides -showState. > >> The WWDC video say to use weak pointers to self in the block otherwise there >> could be retain cycle issues. This is an example. The utility functions are >> actually quite larger and called from multiple places. I'm not creating the >> strong refrence via a variable because these blocks won't be called if self >> doesn't exist. > > For this case, you don't even have to worry about referencing self in the > blocks directly. You don't need to use the weak copy, controller. First, > the object is not itself retaining the blocks. So, if the blocks retain > self, that's still not a retain cycle. Second, the blocks will be disposed > of when the animation completes. So any reference they hold on self is > released when that happens. > > Regards, > Ken > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com