I have a UIViewController which is presented modally, it has a textfield which 
allows editing and a model object, call it foo, on which it can attempt to set 
the 'topicName' property. Because I'm dealing with UIDocument(s) and trying to 
be nicely iCloud compatible and the topic name change does require a background 
call, the setTopicName: method cannot directly return YES or NO, it has a 
completionHandler which runs after the operation is attempted (and on the main 
thread). I'm using that completion handler to either pop up an alert sheet 
saying it failed, or call the onCancel: method of myself to dismiss the modal 
window. 

With the code below I'm getting a warning "Automatic Reference Counting Issue: 
Capturing 'self' strongly in this block is likely to lead to a retain cycle", 
but I don't see why. I understand that 'self' is retained by the block, but 
after the block runs, it should be released again. I've re-read the ARC guide 
and understand why, if you set a block as a property of yourself and that block 
uses self, it can cause a retain cycle, but I'm not setting this block as a 
property and I don't see how, for an anonymous block which is passed down the 
call chain and run, there would be a retain cycle. 

Am I missing the blindingly obvious, or is ARC just being very cautious about 
ANY block retaining self and suggesting I use another pattern? I can, I can 
easily set up a weak reference to myself just before the block and use it .. I 
just want to understand why. 


-(BOOL)textFieldShouldReturn:(UITextField*)textField
{
        [ foo setTopicName:[ textField text ] completionHandler:^(BOOL)success{

                if( !success )
                {
                        // present an alert sheet
                }
                else
                {
                        // onCancel is also the callback from the 'cancel' 
button and dismissed this modally presented viewcontroller
                        [ self onCancel:nil ];  // <-- ARC not too happy with 
this
                }       
        } ];
}_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to