• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Question about block, ARC, self, and reference counting.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Question about block, ARC, self, and reference counting.


  • Subject: Re: Question about block, ARC, self, and reference counting.
  • From: Scott Andrew <email@hidden>
  • Date: Thu, 12 Apr 2012 11:35:25 -0700

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 (email@hidden)

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:

This email sent to email@hidden

References: 
 >Question about block, ARC, self, and reference counting. (From: Scott Andrew <email@hidden>)
 >Re: Question about block, ARC, self, and reference counting. (From: Ken Thomases <email@hidden>)

  • Prev by Date: Re: Question about hebrew in textfields and textviews
  • Next by Date: Watching a variable in Xcode 4.3
  • Previous by thread: Re: Question about block, ARC, self, and reference counting.
  • Next by thread: iOS 5: iPod Library Access
  • Index(es):
    • Date
    • Thread