0

In a project using ARC, I have a UIViewController that is handling too many concerns, so I'm looking to split things up. One obvious thing for me to take out is a method that formats and sends an email, and split that into a separate object.

My controller currently handles the MFMailComposeViewControllerDelegate protocol because, after an email is successfully sent, I have some additional work to do.

My question is, if the controller uses as separate object for emailing, and I give it a pointer back to the controller for use as the MFMailComposeViewController mailComposeDelegate, am I going to create a problem -- specifically retain cycle?

If so, what would be a better approach in this scenario? Would it be enough to set the property pointing back to the controller as weak?

Mattio
  • 2,014
  • 3
  • 24
  • 37

1 Answers1

1

As you suggested in your question, to avoid retain cycle you just need to make your helper object's mailComposeDelegate property a weak property.

@interface MyViewController : UIViewConroller
@property(nonatomic, strong) MyHelperEmailObjectClass *emailHelper;
@end

@interface MyHelperEmailObjectClass : NSObject    
@property(nonatomic, weak) id<MFMailComposeViewControllerDelegate> mailComposeDelegate;
@end

You would get a retain cycle if the objects had eachother assigned to strong properties.

robbartoszewski
  • 896
  • 6
  • 11